Height analysis
# install.packages("zoo")
#install.packages("polynom")
library(dplyr)
library(ggplot2)
library(lubridate)
library(hydroGOF)
library(xtable)
library(knitr)
library(tidyr)
library(RSQLite)
library(agricolae)
library(scales)
library(zoo)
library(lme4)
library(polynom)
lode observed data
upDir <- "D:/R/CombinedData/"
obsData <- "D:/R/CombinedData/"
obsAll <- read.table(paste0(obsData, "ObsAll.txt"),
header = TRUE)
obsA1<- obsAll %>%
dplyr::filter(Collection=="2000_2002")%>%
mutate(StartDate=dmy(StartDate),MidDate=dmy(MidDate),FinishDate=dmy(FinishDate),Clock.Today=dmy(Clock.Today)) %>%
#mutate(SowingDate=as.factor(ifelse(SowingDate=="no","Sd_No",paste0("Sd_",SowingDate)))) %>% # assume this is typo to be fixed?
mutate(GrowthSeason1=as.factor(paste0("Gs_",GrowthSeason))) %>% # creating more intuitive labels here
mutate(Rotation1=as.factor(paste0("Rt_",Rotation))) %>%
mutate(ExpUnitCode=as.factor(paste0(Name,GrowthSeason1,Rotation1))) %>%
mutate(Clock.Today1 = as.POSIXct(paste(Clock.Today,Time),format="%Y-%m-%d %H:%M:%S"))%>%
mutate(GrowthSeason2=as.factor(paste0("Y",GrowthSeason,"(",Period,")"))) %>%
mutate(Rotation2=as.factor(ifelse(Rotation=="1",paste0("S",Rotation),paste0("R",Rotation))))
obsA4<- obsAll %>%
dplyr::filter(Collection=="2014_2018")%>%
mutate(StartDate=dmy(StartDate),MidDate=dmy(MidDate),FinishDate=dmy(FinishDate),Clock.Today=dmy(Clock.Today)) %>%
#mutate(SowingDate=as.factor(ifelse(SowingDate=="no","Sd_No",paste0("Sd_",SowingDate)))) %>% # assume this is typo to be fixed?
mutate(GrowthSeason1=as.factor(paste0("Gs_",GrowthSeason))) %>% # creating more intuitive labels here
mutate(Rotation1=as.factor(paste0("Rt_",Rotation))) %>%
mutate(ExpUnitCode=as.factor(paste0(Name,GrowthSeason1,Rotation1))) %>%
mutate(Clock.Today1 = as.POSIXct(paste(Clock.Today,Time),format="%Y-%m-%d %H:%M:%S"))%>%
mutate(GrowthSeason2=as.factor(paste0("Y",GrowthSeason,"(",Period,")"))) %>%
mutate(Rotation2=as.factor(ifelse(Rotation=="1",paste0("S",Rotation),paste0("R",Rotation))))
obsA2<- obsAll %>%
dplyr::filter(Collection=="1997_2001")%>%
mutate(StartDate=dmy(StartDate),MidDate=dmy(MidDate),FinishDate=dmy(FinishDate),Clock.Today=dmy(Clock.Today)) %>%
#mutate(SowingDate=as.factor(ifelse(SowingDate=="no","Sd_No",paste0("Sd_",SowingDate)))) %>% # assume this is typo to be fixed?
mutate(GrowthSeason1=as.factor(paste0("Gs_",GrowthSeason))) %>% # creating more intuitive labels here
mutate(Rotation1=as.factor(paste0("Rt_",Rotation))) %>%
mutate(ExpUnitCode=as.factor(paste0(Name,GrowthSeason1,Rotation1))) %>%
mutate(Clock.Today1 = as.POSIXct(paste(Clock.Today,Time),format="%Y-%m-%d %H:%M:%S"))%>%
mutate(GrowthSeason2=as.factor(paste0("Y",GrowthSeason,"(",Period,")"))) %>%
mutate(Rotation2=as.factor(paste0("R",Rotation)))
obsA3<- obsAll %>%
dplyr::filter(Collection=="2002_2004")%>%
mutate(StartDate=dmy(StartDate),MidDate=dmy(MidDate),FinishDate=dmy(FinishDate),Clock.Today=dmy(Clock.Today)) %>%
#mutate(SowingDate=as.factor(ifelse(SowingDate=="no","Sd_No",paste0("Sd_",SowingDate)))) %>% # assume this is typo to be fixed?
mutate(GrowthSeason1=as.factor(paste0("Gs_",GrowthSeason))) %>% # creating more intuitive labels here
mutate(Rotation1=as.factor(paste0("Rt_",Rotation))) %>%
mutate(ExpUnitCode=as.factor(paste0(Name,GrowthSeason1,Rotation1))) %>%
mutate(Clock.Today1 = as.POSIXct(paste(Clock.Today,Time),format="%Y-%m-%d %H:%M:%S"))%>%
mutate(GrowthSeason2=as.factor(paste0("Y",GrowthSeason,"(",Period,")"))) %>%
mutate(Rotation2=as.factor(paste0("R",Rotation)))
obsA<-rbind(obsA2,obsA3,obsA1,obsA4)
summary(obsA)
Clock.Today Name Collection Experiment Water
Min. :1997-01-28 Iversen_91DefoliationLL :895 1997_2001: 955 Lincoln2000:1218 dry: 973
1st Qu.:2001-02-10 Iversen_121DefoliationLLFDFD5 :777 2000_2002:1067 Lincoln2015:1132 irr:3078
Median :2002-08-22 Iversen_8Waterirr :494 2002_2004: 895 Lincoln2001: 387
Mean :2005-09-21 Iversen_8Waterdry :461 2010_2012: 0 Lincoln2003: 384
3rd Qu.:2015-03-09 Iversen_121DefoliationHHFDFD5 :288 2014_2018:1134 Lincoln2002: 257
Max. :2018-01-15 Iversen_9SowingDateSD1Waterirr:277 Lincoln2004: 254
(Other) :859 (Other) : 419
Defoliation SowingDate FD Period GrowthSeason Rotation StartDate
HH: 288 No :1850 FD10: 35 00_01 :995 Min. :1.000 Min. :1.000 Min. :1996-11-01
LL:3763 no :1134 FD2 : 34 01_02 :522 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2000-12-27
SD1 : 536 FD5 :3982 02_03 :432 Median :2.000 Median :3.000 Median :2002-06-14
SD2 : 199 03_04 :412 Mean :2.277 Mean :2.983 Mean :2005-08-15
SD3 : 169 15_16 :410 3rd Qu.:3.000 3rd Qu.:4.000 3rd Qu.:2015-01-30
SD4 : 163 16_17 :342 Max. :6.000 Max. :7.000 Max. :2017-12-04
(Other): 0 (Other):938
MidDate FinishDate Interval Variable VariableUnits
Min. :1996-12-27 Min. :1997-02-21 Min. : 0.00 NodeNumber :792 % : 220
1st Qu.:2001-02-10 1st Qu.:2001-03-06 1st Qu.: 19.00 Height :697 cm : 454
Median :2002-08-09 Median :2002-10-05 Median : 32.00 shootbiomass:585 fractio0l: 833
Mean :2005-09-14 Mean :2005-10-15 Mean : 36.97 LAI :538 Fraction : 434
3rd Qu.:2015-03-13 3rd Qu.:2015-04-24 3rd Qu.: 48.00 SWC :284 kg/ha :1045
Max. :2017-12-25 Max. :2018-01-15 Max. :122.00 Fraction :220 m2/m2 : 538
(Other) :935 mm : 527
Time Observed StdDEV ExperimentID TreatmentID ID
12:00:00:4051 Min. : 0.00 Min. : 0.0000 E1: 955 ILL :1389 E3ILL :895
1st Qu.: 3.50 1st Qu.: 0.0000 E2:1067 ILLF5 : 777 E5ILLF5:777
Median : 12.47 Median : 0.2582 E3: 895 DLL : 461 E1ILL :494
Mean : 585.40 Mean : 88.3883 E4: 0 IHHF5 : 288 E1DLL :461
3rd Qu.: 623.15 3rd Qu.: 30.3450 E5:1134 ILLS1 : 277 E5IHHF5:288
Max. :8556.38 Max. :2532.5264 DLLS1 : 259 E2ILLS1:277
NA's :1192 (Other): 600 (Other):859
GrowthSeason1 Rotation1 ExpUnitCode Clock.Today1
Gs_1:1352 Rt_1:1175 Iversen_91DefoliationLLGs_2Rt_1: 84 Min. :1997-01-28 12:00:00
Gs_2:1447 Rt_2: 823 Iversen_91DefoliationLLGs_1Rt_1: 72 1st Qu.:2001-02-10 12:00:00
Gs_3: 530 Rt_3: 613 Iversen_91DefoliationLLGs_1Rt_4: 67 Median :2002-08-22 12:00:00
Gs_4: 272 Rt_4: 458 Iversen_91DefoliationLLGs_1Rt_5: 67 Mean :2005-09-21 17:05:34
Gs_5: 399 Rt_5: 443 Iversen_91DefoliationLLGs_1Rt_3: 66 3rd Qu.:2015-03-09 12:00:00
Gs_6: 51 Rt_6: 397 Iversen_91DefoliationLLGs_1Rt_6: 62 Max. :2018-01-15 12:00:00
Rt_7: 142 (Other) :3633
GrowthSeason2 Rotation2
Y1(00_01): 596 R2 :823
Y1(02_03): 432 S1 :768
Y2(01_02): 428 R3 :613
Y2(03_04): 412 R4 :458
Y2(15_16): 410 R5 :443
Y5(00_01): 399 R1 :407
(Other) :1374 (Other):539
obsA
Load Tt and Join Observed data together
upDir <- "D:/R/"
obsData <- "D:/R/TtAll/"
Tt<- read.table(paste0(obsData, "df.all.txt"),
header = TRUE)
TtA <- Tt %>% mutate(Clock.Today=dmy(Clock.Today), ExpUnitCode=as.factor(ExpName))
TtA
ObsH <-merge(obsA,TtA,by=c("Clock.Today","ExpUnitCode")) %>%
mutate(GrowthRotation=as.factor(paste0(GrowthSeason.x,Rotation.x)))%>%
dplyr::filter(Water.x=="irr")%>%
dplyr::filter(Defoliation.x=="LL")%>%
dplyr::filter(Variable=="Height")%>%
dplyr::filter(Tb==1)
summary(ObsH)
Clock.Today ExpUnitCode Name
Min. :1997-10-23 Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 Iversen_121DefoliationLLFDFD5 :108
1st Qu.:2001-02-20 Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 Iversen_91DefoliationLL :107
Median :2002-10-25 Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 Iversen_8Waterirr : 68
Mean :2005-09-17 Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 Iversen_9SowingDateSD1Waterirr: 67
3rd Qu.:2015-02-09 Iversen_8WaterirrGs_5Rt_1 : 10 Iversen_9SowingDateSD2Waterirr: 25
Max. :2018-01-15 Iversen_91DefoliationLLGs_2Rt_1 : 10 Iversen_9SowingDateSD3Waterirr: 18
(Other) :340 (Other) : 15
Collection Experiment.x Water.x Defoliation.x SowingDate.x FD.x Period
1997_2001: 68 Lincoln2000:131 dry: 0 HH: 0 No :175 FD10: 0 00_01 :128
2000_2002:125 Lincoln2015:108 irr:408 LL:408 no :108 FD2 : 0 02_03 : 52
2002_2004:107 Lincoln2003: 54 SD1 : 67 FD5 :408 03_04 : 48
2010_2012: 0 Lincoln2001: 35 SD2 : 25 16_17 : 39
2014_2018:108 Lincoln2004: 31 SD3 : 18 01_02 : 38
Lincoln2002: 22 SD4 : 15 15_16 : 35
(Other) : 27 (Other): 0 (Other): 68
GrowthSeason.x Rotation.x StartDate MidDate FinishDate
Min. :1.000 Min. :1.000 Min. :1997-10-07 Min. :1997-10-28 Min. :1997-11-19
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2001-01-24 1st Qu.:2001-02-13 1st Qu.:2001-03-23
Median :2.000 Median :3.000 Median :2002-10-06 Median :2002-10-26 Median :2002-11-16
Mean :2.105 Mean :3.098 Mean :2005-08-16 Mean :2005-09-14 Mean :2005-10-14
3rd Qu.:3.000 3rd Qu.:5.000 3rd Qu.:2015-01-30 3rd Qu.:2015-02-19 3rd Qu.:2015-03-11
Max. :5.000 Max. :7.000 Max. :2017-12-04 Max. :2017-12-25 Max. :2018-01-15
Interval Variable VariableUnits Time Observed StdDEV
Min. : 0.00 Height :408 % : 0 12:00:00:408 Min. : 0.00 Min. : 0.000
1st Qu.: 14.75 Branch : 0 cm :233 1st Qu.: 10.17 1st Qu.: 0.000
Median : 28.00 CrownWt : 0 fractio0l: 0 Median : 35.62 Median : 3.107
Mean : 32.18 Fraction : 0 Fraction : 0 Mean :107.19 Mean :12.001
3rd Qu.: 41.00 HardStemWt: 0 kg/ha : 0 3rd Qu.:129.12 3rd Qu.:16.955
Max. :116.00 LAI : 0 m2/m2 : 0 Max. :681.30 Max. :91.520
(Other) : 0 mm :175 NA's :229
ExperimentID TreatmentID ID GrowthSeason1 Rotation1 Clock.Today1
E1: 68 ILL :175 E5ILLF5:108 Gs_1:160 Rt_1:112 Min. :1997-10-23 12:00:00
E2:125 ILLF5 :108 E3ILL :107 Gs_2:140 Rt_2: 80 1st Qu.:2001-02-20 12:00:00
E3:107 ILLS1 : 67 E1ILL : 68 Gs_3: 54 Rt_3: 59 Median :2002-10-25 12:00:00
E4: 0 ILLS2 : 25 E2ILLS1: 67 Gs_4: 13 Rt_4: 50 Mean :2005-09-17 22:25:44
E5:108 ILLS3 : 18 E2ILLS2: 25 Gs_5: 41 Rt_5: 46 3rd Qu.:2015-02-10 06:00:00
ILLS4 : 15 E2ILLS3: 18 Gs_6: 0 Rt_6: 42 Max. :2018-01-15 12:00:00
(Other): 0 (Other): 15 Rt_7: 19
GrowthSeason2 Rotation2 year day rain maxt
Y1(00_01): 87 R2 :80 Min. :1997 Min. : 1.0 Min. : 0.000 Min. : 7.90
Y1(02_03): 52 S1 :77 1st Qu.:2001 1st Qu.: 63.0 1st Qu.: 0.000 1st Qu.:15.32
Y2(03_04): 48 R3 :59 Median :2002 Median :138.5 Median : 0.000 Median :19.00
Y5(00_01): 41 R4 :50 Mean :2005 Mean :170.4 Mean : 0.876 Mean :19.17
Y3(16_17): 39 R5 :46 3rd Qu.:2015 3rd Qu.:292.0 3rd Qu.: 0.000 3rd Qu.:22.23
Y2(01_02): 38 R6 :42 Max. :2018 Max. :365.0 Max. :31.800 Max. :33.80
(Other) :103 (Other):54
mint mean radn wind vp Pp
Min. :-4.900 Min. : 2.55 Min. : 1.50 Min. :0.700 Min. : 5.10 Min. :10.02
1st Qu.: 4.375 1st Qu.:10.40 1st Qu.: 9.70 1st Qu.:2.900 1st Qu.:10.00 1st Qu.:12.21
Median : 8.700 Median :13.20 Median :16.14 Median :3.900 Median :11.40 Median :14.27
Mean : 7.853 Mean :13.49 Mean :16.73 Mean :3.997 Mean :11.77 Mean :13.93
3rd Qu.:11.300 3rd Qu.:16.50 3rd Qu.:22.62 3rd Qu.:4.900 3rd Qu.:13.72 3rd Qu.:15.82
Max. :20.600 Max. :26.20 Max. :33.40 Max. :9.300 Max. :22.00 Max. :16.65
Tb TTbeta Tbb TTbroken TbF TTfick
Min. :1 Min. : 0.128 Min. :1 Min. : 1.841 Min. :1 Min. : 2.222
1st Qu.:1 1st Qu.: 2.247 1st Qu.:1 1st Qu.: 6.822 1st Qu.:1 1st Qu.: 8.172
Median :1 Median : 4.118 Median :1 Median : 9.015 Median :1 Median :10.646
Mean :1 Mean : 5.812 Mean :1 Mean : 9.535 Mean :1 Mean :10.878
3rd Qu.:1 3rd Qu.: 8.085 3rd Qu.:1 3rd Qu.:12.040 3rd Qu.:1 3rd Qu.:13.588
Max. :1 Max. :23.343 Max. :1 Max. :20.258 Max. :1 Max. :20.813
ExpName Experiment.y Water.y Defoliation.y SowingDate.y
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 Lincoln1997: 68 dry: 0 HH: 0 No :175
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 Lincoln2000:110 irr:408 LL:408 no :108
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 Lincoln2001: 15 LS: 0 SD1 : 67
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 Lincoln2002:107 SL: 0 SD2 : 25
Iversen_8WaterirrGs_5Rt_1 : 10 Lincoln2010: 0 SS: 0 SD3 : 18
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2015:108 SD4 : 15
(Other) :340 (Other): 0
FD.y GrowthSeason.y Rotation.y Tt_beta_sum Tt_fick_sum Tt_broken_sum
FD10: 0 Gs_1:160 Rt_1 :112 Min. : 0.2834 Min. : 4.022 Min. : 3.333
FD2 : 0 Gs_2:140 Rt_2 : 80 1st Qu.: 60.8023 1st Qu.: 165.210 1st Qu.: 142.690
FD5 :408 Gs_3: 54 Rt_3 : 59 Median :123.4401 Median : 299.224 Median : 258.979
Gs_4: 13 Rt_4 : 50 Mean :157.2934 Mean : 326.606 Mean : 283.618
Gs_5: 41 Rt_5 : 46 3rd Qu.:218.2569 3rd Qu.: 453.159 3rd Qu.: 395.238
Gs_6: 0 Rt_6 : 42 Max. :722.6708 Max. :1186.654 Max. :1051.876
(Other): 19
Ppm Tmean GrowthRotation
Min. :10.25 Min. : 7.024 11 : 60
1st Qu.:11.99 1st Qu.:10.974 12 : 38
Median :14.48 Median :13.963 21 : 24
Mean :13.84 Mean :13.226 26 : 24
3rd Qu.:15.99 3rd Qu.:15.771 13 : 23
Max. :16.55 Max. :19.327 22 : 23
(Other):216
mytheme1<-theme(
panel.spacing=unit(.01, "lines"),
panel.border = element_rect(colour = "black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black",size = 1),
axis.text.x = element_text(face = "plain", color = "black", size = 14,angle=90, vjust=0.5, hjust = 1),
axis.text.y = element_text(face = "plain", color = "black", size = 14),
axis.title.x=element_text(face="bold",colour="black",size = 14),
axis.title.y=element_text(face="bold",colour="black",size = 14),
strip.background = element_rect(colour = "black", fill = "white",size=1),
strip.text.x = element_text(size=14, angle=0, face = "plain"),
strip.text.y = element_text(size=14, face="plain"),
legend.title = element_text(colour="black", size=14, face="bold"),
axis.text = element_text(face = "bold", vjust = 0.5, size = 14))
mytheme3<-theme(
legend.title = element_text(colour="black", size=14, face="bold"),
legend.text = element_text(colour="black", size = 14,face="plain"),
panel.spacing=unit(.01, "lines"),
panel.border = element_rect(colour = "black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black",size = 1),
axis.text.x = element_text(face = "plain", color = "black", size = 14, vjust=0.5, hjust = 1),
axis.text.y = element_text(face = "plain", color = "black", size = 14),
axis.title.x=element_text(face="bold",colour="black",size = 14),
axis.title.y=element_text(face="bold",colour="black",size = 14),
strip.background = element_rect(colour = "black", fill = "white",size=1),
strip.text.x = element_text(size=14, angle=0, face = "plain"),
strip.text.y = element_text(size=14, face="plain"),
axis.text = element_text(face = "bold", vjust = 0.5, size = 14),
legend.position = "right", legend.box = "vertical")
Height against Mean temperature
obsheight<-ObsH%>%
dplyr::filter(Name=="Iversen_8Waterirr")
obsheight$Rotation2<- factor(obsheight$Rotation2, levels=c("R1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Mean temperature (°C)")+ylab("Plant height (mm)")+ facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE,linetype=1 , colour="black")+
ggtitle("E1ILL(Iversen_8Waterirr)")+mytheme1+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")

ggsave("D:/R/Pictures/Height/Iversen_8WaterirrHeight.png", width=8, height=6, dpi=500)
obsheight<-ObsH%>%
dplyr::filter(Name=="Iversen_8Waterirr")
obsheight$Rotation2<- factor(obsheight$Rotation2, levels=c("R1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time (°Cd)")+ylab("Plant height (mm)")+ facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE,linetype=1 , colour="black")+
ggtitle("E1ILL(Iversen_8Waterirr)")+mytheme1+
scale_x_continuous(breaks = seq(0, 600, by =200), limits=c(0,500))+
scale_y_continuous(breaks = seq(0, 550, by =200), limits=c(0,600))+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")

ggsave("D:/R/Pictures/Height/Iversen_8WaterirrHeight.png", width=8, height=6, dpi=500)
Iversen_91DefoliationLL
obsheight1<-ObsH%>%
dplyr::filter(Name=="Iversen_91DefoliationLL")
obsheight1$Rotation2<- factor(obsheight1$Rotation2, levels=c("R1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight1%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time (°Cd)")+ylab("Plant height (mm)")+ggtitle("E3ILL(Iversen_91DefoliationLL)")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE,linetype=1 , colour="black")+
mytheme1+
scale_x_continuous(breaks = seq(0, 600, by =200), limits=c(0,500))+
scale_y_continuous(breaks = seq(0, 550, by =200), limits=c(0,600))+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")

ggsave("D:/R/Pictures/Height/Iversen_91DefoliationLL.png", width=8, height=6, dpi=500)
mean temperature
obsheight1<-ObsH%>%
dplyr::filter(Name=="Iversen_91DefoliationLL")
obsheight1%>%
ggplot(aes(x=mean, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time (°Cd)")+ylab("Plant height (mm)")+ggtitle("Iversen_91DefoliationLL")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE,linetype=1 , colour="black")+
mytheme1+
# scale_x_continuous(breaks = seq(0, 600, by =200), limits=c(0,500))+
# scale_y_continuous(breaks = seq(0, 550, by =200), limits=c(0,600))+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")

#ggsave("D:/R/Pictures/Height/Iversen_91DefoliationLL.png", width=8, height=6, dpi=500)
Iversen_9SowingDateSD1Waterirr
obsheight3<-ObsH%>%
dplyr::filter(Name=="Iversen_9SowingDateSD1Waterirr")%>%
mutate(Observed=Observed*10)
obsheight3$Rotation2<- factor(obsheight3$Rotation2, levels=c("S1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight3%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time (°Cd)")+ylab("Plant height (mm)")+ggtitle("E2ILLS1(Iversen_9SowingDateSD1Waterirr)")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="black")+
mytheme1+
scale_x_continuous(breaks = seq(0, 800, by =300), limits=c(0,750))+
scale_y_continuous(breaks = seq(0, 600, by =200), limits=c(0,700))+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")

ggsave("D:/R/Pictures/Height/Iversen_9SowingDateSD1Waterirr.png", width=8, height=5, dpi=500)
Iversen_9SowingDateSD2Waterirr
obsheight1<-ObsH%>%
dplyr::filter(Name=="Iversen_9SowingDateSD2Waterirr")%>%
mutate(Observed=Observed*10)
obsheight1$Rotation2<- factor(obsheight1$Rotation2, levels=c("S1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight1%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time (°Cd)")+ylab("Plant height (mm)")+ggtitle("E2ILLS2(Iversen_9SowingDateSD2Waterirr)")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")+
scale_x_continuous(breaks = seq(0, 800, by =200), limits=c(0,900))+
scale_y_continuous(breaks = seq(0, 600, by =200), limits=c(0,700))+
theme(
panel.spacing=unit(.01, "lines"),
panel.border = element_rect(colour = "black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black",size = 1),
axis.text.x = element_text(face = "plain", color = "black", size = 14, vjust=0.5, hjust = 1),
axis.text.y = element_text(face = "plain", color = "black", size = 14),
axis.title.x=element_text(face="bold",colour="black",size = 14),
axis.title.y=element_text(face="bold",colour="black",size = 14),
strip.background = element_rect(colour = "black", fill = "white",size=1),
strip.text.x = element_text(size=14, angle=0, face = "plain"),
strip.text.y = element_text(size=14, face="plain"),
legend.title = element_text(colour="black", size=14, face="bold"),
axis.text = element_text(face = "bold", vjust = 0.5, size = 14))

ggsave("D:/R/Pictures/Height/Iversen_9SowingDateSD2Waterirr.png", width=8, height=3, dpi=500)
Iversen_9SowingDateSD3Waterirr
obsheight1<-ObsH%>%
dplyr::filter(Name=="Iversen_9SowingDateSD3Waterirr")%>%
mutate(Observed=Observed*10)
obsheight1$Rotation2<- factor(obsheight1$Rotation2, levels=c("S1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight1
obsheight1%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time (°Cd)")+ylab("Plant height (mm)")+ggtitle("E2ILLS3(Iversen_9SowingDateSD3Waterirr)")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")+
scale_x_continuous(breaks = seq(0, 1000, by =200), limits=c(0,1100))+
scale_y_continuous(breaks = seq(0, 600, by =200), limits=c(0,700))+
#remove grid lines
theme(
panel.spacing=unit(.01, "lines"),
panel.border = element_rect(colour = "black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black",size = 1),
axis.text.x = element_text(face = "plain", color = "black", size = 14, vjust=0.5, hjust = 1),
axis.text.y = element_text(face = "plain", color = "black", size = 14),
axis.title.x=element_text(face="bold",colour="black",size = 14),
axis.title.y=element_text(face="bold",colour="black",size = 14),
strip.background = element_rect(colour = "black", fill = "white",size=1),
strip.text.x = element_text(size=14, angle=0, face = "plain"),
strip.text.y = element_text(size=14, face="plain"),
legend.title = element_text(colour="black", size=14, face="bold"),
axis.text = element_text(face = "bold", vjust = 0.5, size = 14))

ggsave("D:/R/Pictures/Height/Iversen_9SowingDateSD3Waterirr.png", width=8, height=3, dpi=500)
Iversen_9SowingDateSD4Waterirr
obsheight1<-ObsH%>%
dplyr::filter(Name=="Iversen_9SowingDateSD4Waterirr")%>%
mutate(Observed=Observed*10)
obsheight1$Rotation2<- factor(obsheight1$Rotation2, levels=c("S1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight1
obsheight1%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time(°Cd)")+ylab("Plant height (mm)")+ggtitle("E2ILLS4(Iversen_9SowingDateSD4Waterirr)")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")+
scale_x_continuous(breaks = seq(0, 1000, by =200), limits=c(0,1100))+
scale_y_continuous(breaks = seq(0, 600, by =200), limits=c(0,600))+
#remove grid lines
theme(
panel.spacing=unit(.01, "lines"),
panel.border = element_rect(colour = "black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black",size = 1),
axis.text.x = element_text(face = "plain", color = "black", size = 14, vjust=0.5, hjust = 1),
axis.text.y = element_text(face = "plain", color = "black", size = 14),
axis.title.x=element_text(face="bold",colour="black",size = 14),
axis.title.y=element_text(face="bold",colour="black",size = 14),
strip.background = element_rect(colour = "black", fill = "white",size=1),
strip.text.x = element_text(size=14, angle=0, face = "plain"),
strip.text.y = element_text(size=14, face="plain"),
legend.title = element_text(colour="black", size=14, face="bold"),
axis.text = element_text(face = "bold", vjust = 0.5, size = 14))

ggsave("D:/R/Pictures/Height/Iversen_9SowingDateSD4Waterirr.png", width=8, height=3, dpi=500)
Iverson12DefoliationFD5
obsheight1<-ObsH%>%
dplyr::filter(Name=="Iversen_121DefoliationLLFDFD5")%>%
mutate(Observed=Observed*10)
obsheight1$Rotation2<- factor(obsheight1$Rotation2, levels=c("S1", "R2", "R3", "R4", "R5","R6", "R7"))
obsheight1%>%
ggplot(aes(x=Tt_broken_sum, y=Observed), colour=factor(Name))+geom_point(size=2)+theme_bw()+xlab("Thermal time(°Cd)")+ylab("Plant height (mm)")+ggtitle("E5ILLF5(Iversen_121DefoliationLLFDFD5)")+
facet_grid(GrowthSeason2~Rotation2)+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="blue")+
scale_y_continuous(breaks = seq(0, 1000, by =600), limits=c(0,900))+
scale_x_continuous(breaks = seq(0, 600, by =200), limits=c(0,500))+
mytheme1

ggsave("D:/R/Pictures/Height/Iversen_121DefoliationLLFDFD5.png", width=8, height=6, dpi=500)
convert unit
calculate for heightchron
#detach(package:plyr)
obsH2<-ObsH%>%
dplyr::filter(Collection!="1997_2001")%>%
dplyr::filter(Collection!="2002_2004")%>%
mutate(Observed=Observed*10)
obsH3<-ObsH%>%
dplyr::filter(Collection!="2000_2002")%>%
dplyr::filter(Collection!="2014_2018")
obsH3
obsHN<-rbind(obsH2,obsH3)
obsHN
obsSlope <- obsHN%>%
group_by(Name,GrowthSeason.x,Rotation.x,Collection,Tmean,Ppm,GrowthRotation,ID,ExperimentID) %>%
do(mod = lm(Tt_broken_sum~Observed,data=.)) %>%
mutate(slope = summary(mod)$coeff[2]) %>%
dplyr::select(-mod)
obsSlope
obsHanalysis<- obsHN%>%
group_by(Name,GrowthSeason.x,Rotation.x,Collection,ID,ExperimentID) %>%
do(mod = lm(Tt_broken_sum~Observed,data=.)) %>%
mutate(slope = summary(mod)$coeff[2]) %>%
mutate(R2 = summary(mod)$r.squared)%>%
mutate(P=anova(mod)$'Pr(>F)'[1])%>%
mutate(intcp= summary(mod)$coeff[1])%>%
dplyr::select(-mod)
ANOVA F-tests on an essentially perfect fit are unreliableANOVA F-tests on an essentially perfect fit are unreliable
obsHanalysis
write.csv(obsHanalysis,"D:/R/obsHanalysis.csv", row.names = FALSE)
load Rotation and Growth season
library(plyr)
--------------------------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
--------------------------------------------------------------------------------------------------
Attaching package: <U+393C><U+3E31>plyr<U+393C><U+3E32>
The following object is masked from <U+393C><U+3E31>package:lubridate<U+393C><U+3E32>:
here
The following objects are masked from <U+393C><U+3E31>package:dplyr<U+393C><U+3E32>:
arrange, count, desc, failwith, id, mutate, rename, summarise, summarize
phyll <- "D:\\R\\"
StartGrazing <- read.table(paste0(phyll, "ExperimentList.txt"),
header = TRUE)
StartGrazing1<-StartGrazing %>%
mutate(GrowthRotation= as.factor(paste0(GrowthSeason,Rotation)))
HchronPp<- merge(StartGrazing1,obsSlope,by=c("Name","Collection","GrowthRotation"))
HchronPp1<-HchronPp%>%
dplyr::filter(Name!="Iversen_8Waterirr"|GrowthRotation!="57")%>%
dplyr::filter(Name!="Iversen_121DefoliationLLFDFD5"|GrowthRotation!="36")%>%
dplyr::filter(Name!="Iversen_121DefoliationLLFDFD5"|GrowthRotation!="14")%>%
dplyr::filter(Name!="Iversen_121DefoliationLLFDFD5"|GrowthRotation!="37")%>%
dplyr::filter(Name!="Iversen_121DefoliationLLFDFD5"|GrowthRotation!="12")%>%
dplyr::filter(Name!="Iversen_121DefoliationLLFDFD5"|GrowthRotation!="41")%>%
dplyr::filter(Name!="Iversen_8Waterirr"|GrowthRotation!="26")%>%
dplyr::filter(Name!="Iversen_8Waterirr"|GrowthRotation!="32")%>%
dplyr::filter(Name!="Iversen_91DefoliationLL"|GrowthRotation!="27")%>%
dplyr::filter(Name!="Iversen_91DefoliationLL"|GrowthRotation!="17")%>%
dplyr::filter(Name!="Iversen_91DefoliationLL"|GrowthRotation!="11")%>%
# # dplyr::filter(Name!="Iversen_91DefoliationLL"|GrowthRotation!="17")%>%
dplyr::filter(Name!="Iversen_9SowingDateSD1Waterirr"|GrowthRotation!="14")%>%
dplyr::filter(Name!="Iversen_9SowingDateSD1Waterirr"|GrowthRotation!="21")%>%
# # dplyr::filter(Name!="Iversen_9SowingDateSD1Waterirr"|GrowthRotation!="26")%>%
dplyr::filter(Name!="Iversen_9SowingDateSD2Waterirr"|GrowthRotation!="13")
##dplyr::filter(Name!="Iversen_9SowingDateSD4Waterirr"|GrowthRotation!="13")%>%
#dplyr::filter(Stage!="Seedling")
# my.formula <- slope ~ poly(Ppm, 2, raw = TRUE)
# m <- lm(my.formula, HchronPp1)
# my.eq <- as.character(signif(as.polynomial(coef(m)), 2))
#
#
# label.text <- paste(gsub("italic(y)=x", "~italic(x)", my.eq, fixed = TRUE),
# paste("italic(R)^2",
# format(summary(m)$r.squared, digits = 2),
# sep = "~`=`~"),
# sep = "~~~~")
my.formula <- function(HchronPp1){
my.formula <- slope ~ poly(Ppm, 2, raw = TRUE)
m <- lm(my.formula, HchronPp1)
my.eq <- as.character(signif(as.polynomial(coef(m)), 2))
label.text <- paste("y","'='",paste(gsub(y, "~italic(x)",my.eq, fixed = TRUE)),
paste("italic(R)^2",format(summary(m)$r.squared, digits = 2),
sep = "~`=`~"),
sep = "~~~~")
as.character(as.expression(label.text));
}
my.eqs <- ddply(HchronPp1,.(Stage),my.formula)
argument 'pattern' has length > 1 and only the first element will be usedargument 'pattern' has length > 1 and only the first element will be used
b<-HchronPp1%>%
ggplot(aes(x=Ppm, y=slope, colour=factor(ID),label=GrowthRotation))+geom_text()+theme_bw()+xlab("Mean photoperiod (h)")+ylab(bquote(bold('Heightchron ('*'°Cd'~'mm'^-1*')')))+
geom_smooth(method = "lm", se = TRUE, formula=y ~ poly(x, 2, raw=TRUE), colour="darkgrey")+
facet_wrap(~Stage,ncol = 2)+mytheme3+theme(legend.title = element_blank())
#b + annotate(geom = "text", x = 11.5, y = 2, label = label.text,
#family = "serif", hjust = 0, parse = TRUE, size = 4)m
b+geom_text(data = my.eqs, aes(x = 13.7, y = 2.5, label = V1),
color = 'black', parse = TRUE, size=4)

detach(package:plyr)
ggsave("D:/R/Pictures/Height/Heightchorn.png", width=8, height=4, dpi=500)
base photoperiod
library(plyr)
--------------------------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
--------------------------------------------------------------------------------------------------
Attaching package: <U+393C><U+3E31>plyr<U+393C><U+3E32>
The following object is masked from <U+393C><U+3E31>package:lubridate<U+393C><U+3E32>:
here
The following objects are masked from <U+393C><U+3E31>package:dplyr<U+393C><U+3E32>:
arrange, count, desc, failwith, id, mutate, rename, summarise, summarize
Pb<-HchronPp1%>%
mutate(pb=1/slope)
lm_eqn <- function(Pb){
m <- lm(pb ~ Ppm, Pb);
eq <- substitute(italic(y) == Ppm + pb %.% italic(Ppm)*","~~italic(R)^2~"="~r2,
list(Ppm = format(coef(m)[1], digits = 2),
pb = format(coef(m)[2], digits = 2),
r2 = format(summary(m)$r.squared, digits = 3)))
as.character(as.expression(eq));
}
eqns <- ddply(Pb,.(Stage),lm_eqn)
Pb%>%
ggplot(aes(x=Ppm, y=pb, colour=factor(ID),label=GrowthRotation))+geom_text()+theme_bw()+xlab("Mean photoperiod (h)")+ylab("1/y")+
geom_smooth(method = "lm", se = TRUE, colour="darkgrey")+
facet_wrap(~Stage,ncol = 2)+mytheme3+theme(legend.title = element_blank())+
scale_x_continuous(breaks = seq(9, 18, by =3), limits=c(9,18))+
geom_text(data = eqns, aes(x = 13.5, y = 2.5, label = V1),
color = 'black', parse = TRUE, size=4.8)

detach(package:plyr)
ggsave("D:/R/Pictures/Height/Heightchorny1.png", width=8, height=4, dpi=500)
HchronPp
X<-HchronPp1$Ppm
Y<-HchronPp1$slope
Xsq<-X^2
Xcub<-X^3
plot(X,Y, pch=19)
model1<-lm(Y~X)
model2<-lm(Y~X+Xsq)
model3<-lm(Y~X+Xsq+Xcub)
mod_lm <-lm(Y~X*(X<14.2)+X*(X>=14.2),data=HchronPp)
anova(model1)
Analysis of Variance Table
Response: Y
Df Sum Sq Mean Sq F value Pr(>F)
X 1 5.3993 5.3993 52.073 2.48e-09 ***
Residuals 51 5.2881 0.1037
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
summary(model1)
Call:
lm(formula = Y ~ X)
Residuals:
Min 1Q Median 3Q Max
-0.42533 -0.19184 -0.09654 0.07362 0.92300
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.56353 0.36014 9.895 1.85e-13 ***
X -0.17883 0.02478 -7.216 2.48e-09 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 0.322 on 51 degrees of freedom
Multiple R-squared: 0.5052, Adjusted R-squared: 0.4955
F-statistic: 52.07 on 1 and 51 DF, p-value: 2.48e-09
anova(model2)
Analysis of Variance Table
Response: Y
Df Sum Sq Mean Sq F value Pr(>F)
X 1 5.3993 5.3993 67.150 8.334e-11 ***
Xsq 1 1.2677 1.2677 15.766 0.0002297 ***
Residuals 50 4.0204 0.0804
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
summary(model2)
Call:
lm(formula = Y ~ X + Xsq)
Residuals:
Min 1Q Median 3Q Max
-0.32871 -0.19718 -0.06290 0.04647 0.82851
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.33706 2.98204 5.143 4.53e-06 ***
X -1.89493 0.43275 -4.379 6.09e-05 ***
Xsq 0.06145 0.01547 3.971 0.00023 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 0.2836 on 50 degrees of freedom
Multiple R-squared: 0.6238, Adjusted R-squared: 0.6088
F-statistic: 41.46 on 2 and 50 DF, p-value: 2.426e-11
anova(model3)
Analysis of Variance Table
Response: Y
Df Sum Sq Mean Sq F value Pr(>F)
X 1 5.3993 5.3993 72.2337 3.33e-11 ***
Xsq 1 1.2677 1.2677 16.9599 0.0001462 ***
Xcub 1 0.3577 0.3577 4.7856 0.0334994 *
Residuals 49 3.6627 0.0747
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
summary(model3)
Call:
lm(formula = Y ~ X + Xsq + Xcub)
Residuals:
Min 1Q Median 3Q Max
-0.35197 -0.15505 -0.05562 0.04544 0.83225
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 73.6600 26.8153 2.747 0.00839 **
X -14.7186 5.8768 -2.505 0.01564 *
Xsq 0.9921 0.4257 2.331 0.02393 *
Xcub -0.0223 0.0102 -2.188 0.03350 *
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 0.2734 on 49 degrees of freedom
Multiple R-squared: 0.6573, Adjusted R-squared: 0.6363
F-statistic: 31.33 on 3 and 49 DF, p-value: 1.873e-11
abline(model1, col="red")
XV<-seq(min(X),max(X),0.01)
yv<-predict(model2,list(X=XV,Xsq=XV^2))
lines(XV,yv,col="blue")

NA
NA
Fit a polynomial regression model
```{r}
HchronPp1
X<-HchronPp1\(Pmean # Y<-HchronPp1\)slope
Xsq<-X^2
Xcub<-X^3
plot(X,Y, pch=19)
model1<-lm(Y~X)
model2<-lm(Y~X+Xsq)
model3<-lm(Y~X+Xsq+Xcub)
mod_lm <-lm(Y~X(X<14.2)+X(X>=14.2),data=HchronPp1)
anova(model1)
summary(model1)
anova(model2)
summary(model2)
anova(model3)
summary(model3)
abline(model1, col=“red”)
XV<-seq(min(HchronPp1\(Pmean),max(HchronPp1\)Pmean),0.01)
yv<-predict(model2,list(X=XV,Xsq=XV^2))
lines(XV,yv,col=“blue”)
title(xlab=“Mean photoperiod (h)”,ylab=“Heightchron (mm/cd )”)
Define stats function
- Using Gauch et al. 2003 (Model evaluation by comparison of model-based predictions and measured values. Agron. J. 95, 1442-1446)
Test stats functions used
s <- c(4231.972,3935.604,3779.652,3627.687,3363.499,3230.566,2868.114,2868.827)
m <- c(4987.66,5636.09,4754.06,4114.53,4141.72,3704.06,5142.19,4762.03)
x <- gauchStats(s,m)
tempDf <- data.frame(statName=c("SB","NU","LC","r_MSD","R2"), statValue=x)
kable(tempDf, digits= 4)
| SB |
76.5 |
| NU |
5.2 |
| LC |
18.2 |
| r_MSD |
99.9 |
| R2 |
7.1 |
tempDf2 <- data.frame(Predicted=s, Observed=m)
x <- tempDf2 %>%
summarise(
n = n(),
r2 = gauchStats(Predicted,Observed)[5],
# rmse = round(rmse(Predicted,Observed),0),
r_rmse = round(rmse(Predicted,Observed)/mean(Observed)*100,1),
nse =format(NSE(Predicted,Observed), digits=3),
sb = gauchStats(Predicted,Observed)[1],
nu = gauchStats(Predicted,Observed)[2],
lc = gauchStats(Predicted,Observed)[3]
) %>%
t()
df <- data.frame(stat = row.names(x),statvalue = x[,1])
df %>%
kable(format = "markdown",digits = 4)
| n |
n |
8 |
| r2 |
r2 |
7.1 |
| r_rmse |
r_rmse |
28.7 |
| nse |
nse |
-4.1 |
| sb |
sb |
76.5 |
| nu |
nu |
5.2 |
| lc |
lc |
18.2 |
#format(coef(m)[2], digits = 2)
Load simulated database
create function to read data (Justin’s script)
load address of db
set table to be enquierd
load table into an object
make it a dataframe
change date to corerct format
explore the df
db.address <- "D:\\APSIMX2\\Prototypes\\Lucerne\\LucerneValidation.db"
tableName<-"Report"
DbTable <- GetApsimNGTable(db.address,tableName)
df <- as.data.frame(DbTable)
df$Clock.Today <- ymd_hms(df$Clock.Today)
str(df)
'data.frame': 90533 obs. of 181 variables:
$ CheckpointID : int 1 1 1 1 1 1 1 1 1 1 ...
$ SimulationID : int 2 3 2 1 1 2 1 3 2 1 ...
$ Defoliation : chr NA NA NA NA ...
$ Zone : chr "paddock" "paddock" "paddock" "paddock" ...
$ Clock.Today : POSIXct, format: "1996-10-31 12:00:00" "2000-10-24 12:00:00" "1996-11-01 12:00:00" ...
$ DiagnosticsVariables.Script.AccumPlantN : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumMineralisation : num 0 0 -0.00561 0 -0.00561 ...
$ DiagnosticsVariables.Script.AccumDenit : num 0 0 -0.184 0 -0.184 ...
$ DiagnosticsVariables.Script.AccumFert : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumLeach : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumDetach : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.DeltaSoilOMN : num 0 0 0.00561 0 0.00561 ...
$ DiagnosticsVariables.Script.DeltaSurfaceOMN : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.DeltaSoilMineralN : num 0 0 -0.189 0 -0.189 ...
$ Lucerne.Root.NSupply.Fixation : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Root.NSupply.Reallocation : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Root.NSupply.Retranslocation : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Root.NSupply.Uptake : num 0 0 0 0 0 0 0 0 0 0 ...
$ Soil.SoilWater.Eo : num 1.89 3.01 4.13 1.89 4.13 ...
$ Soil.SoilWater.Es : num 1.89 3.01 4.13 1.89 4.13 ...
$ SWC : num 752 754 749 752 749 ...
$ DiagnosticsVariables.Script.DUL : num 744 755 744 744 744 744 744 755 744 744 ...
$ Soil.SoilWater.Drainage : num 0 0 0 0 0 0 0 0 0 0 ...
$ Soil.SoilWater.Runoff : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.OutFlowLat : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumEO : num -1.89 -3.01 -6.02 -1.89 -6.02 ...
$ DiagnosticsVariables.Script.AccumEP : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumES : num -1.89 -3.01 -6.02 -1.89 -6.02 ...
$ DiagnosticsVariables.Script.AccumDrainage : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumRunoff : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumRainfall : num 10.4 1.6 12.2 10.4 12.2 ...
$ DiagnosticsVariables.Script.AccumIrrigation : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.AccumOutflowLat : num 0 0 0 0 0 0 0 0 0 0 ...
$ DiagnosticsVariables.Script.SoilWaterDeficit : num 0 0 7.63 0 7.63 ...
$ Lucerne.Grain.Live.Wt : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Shell.Live.Wt : num 0 0 0 0 0 0 0 0 0 0 ...
$ StemWt : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Stem.Live.Wt : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Grain.Live.N : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Shell.Live.N : num 0 0 0 0 0 0 0 0 0 0 ...
$ LeafWt : num 0 0 0 0 0 0 0 0 0 0 ...
$ RootWt : num 0 0 0 0 0 0 0 0 0 0 ...
$ RootTotal : num 0 0 0 0 0 0 0 0 0 0 ...
$ TapRoot : num 0 0 0 0 0 0 0 0 0 0 ...
$ lucerne.TapRoot.Senesced.Wt : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Leaf.Live.N : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Root.Live.N : num 0 0.2 0 0 0 0.9 0.9 0.2 0.9 0.9 ...
$ Lucerne.Leaf.Live.NConc : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Root.Live.NConc : num 0 0.01 0 0 0 0.01 0.01 0.01 0.01 0.01 ...
$ Lucerne.Root.WaterUptake : num 0 0 0 0 0 0 0 0 0 0 ...
$ ET : num 1.89 3.01 4.13 1.89 4.13 ...
$ Lucerne.Root.Depth : num 0 20 0 0 0 20 20 23 23 23 ...
$ Lucerne.Root.MaintenanceRespiration : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Leaf.CoverTotal : num 0 0 0 0 0 0 0 0 0 0 ...
$ NodeNumber : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Leaf.CoverDead : num 0 0 0 0 0 0 0 0 0 0 ...
$ LAI : num 0 0 0 0 0 0 0 0 0 0 ...
$ Height : num 0 0 0 0 0 0 0 0 0 0 ...
$ Lucerne.Leaf.HeightFunction.DeltaHeight.Value.. : num 0 0 0 0 0 0 0 0 0 0 ...
$ SWmm.1. : num 35 33.9 33.6 35 33.6 ...
$ SWmm.2. : num 35.8 34.1 33.8 35.8 33.8 ...
$ SWmm.3. : num 35.1 35.2 33.9 35.1 33.9 ...
$ SWmm.4. : num 30.3 29.1 30.3 30.3 30.3 ...
$ SWmm.5. : num 28.4 27.1 28.4 28.4 28.4 ...
$ SWmm.6. : num 30.8 27 30.8 30.8 30.8 ...
$ SWmm.7. : num 32.4 29 32.4 32.4 32.4 ...
$ SWmm.8. : num 33.4 30 33.4 33.4 33.4 ...
$ SWmm.9. : num 33.6 31.5 33.6 33.6 33.6 ...
$ SWmm.10. : num 34.5 32 34.5 34.5 34.5 ...
$ SWmm.11. : num 34.5 32 34.5 34.5 34.5 ...
$ SWmm.12. : num 34.5 30.7 34.5 34.5 34.5 ...
$ SWmm.13. : num 34.5 28 34.5 34.5 34.5 ...
$ SWmm.14. : num 33.9 30 33.9 33.9 33.9 ...
$ SWmm.15. : num 33.6 34 33.9 33.6 33.9 ...
$ SWmm.16. : num 32.7 34 34 32.7 34 ...
$ SWmm.17. : num 30 35 30.6 30 30.6 ...
$ SWmm.18. : num 30 37 30 30 30 ...
$ SWmm.19. : num 30 37 30 30 30 30 30 37 30 30 ...
$ SWmm.20. : num 30.9 37 30.9 30.9 30.9 ...
$ SWmm.21. : num 31 37 31 31 31 31 31 37 31 31 ...
$ SWmm.22. : num 32 37 32 32 32 32 32 37 32 32 ...
$ SWmm.23. : num 34.9 36 34.9 34.9 34.9 ...
$ Soil.NO3N.1. : num 175 213 173 175 173 ...
$ Soil.NO3N.2. : num 47.2 19.2 47.8 47.2 47.8 ...
$ Soil.NO3N.3. : num 22.2 15.2 22.1 22.2 22.1 ...
$ Soil.NO3N.4. : num 4.05 1.76 5.12 4.05 5.12 ...
$ Soil.NO3N.5. : num 1.95 1.66 2.15 1.95 2.15 ...
$ Soil.NO3N.6. : num 1.67 1.66 1.71 1.67 1.71 ...
$ Soil.NO3N.7. : num 1.64 1.66 1.64 1.64 1.64 ...
$ Soil.NO3N.8. : num 1.6 1.66 1.6 1.6 1.6 ...
$ Soil.NO3N.9. : num 1.64 1.66 1.63 1.64 1.63 ...
$ Soil.NO3N.10. : num 0.186728 0.000394 0.274397 0.186728 0.274397 ...
$ Soil.NO3N.11. : num 1.61e-02 2.54e-05 2.91e-02 1.61e-02 2.91e-02 ...
$ Soil.NO3N.12. : num 3.02e-04 2.44e-05 3.00e-04 3.02e-04 3.00e-04 ...
$ Soil.NO3N.13. : num 1.44e-04 2.35e-05 2.78e-04 1.44e-04 2.78e-04 ...
$ Soil.NO3N.14. : num 2.25e-05 2.26e-05 4.98e-05 2.25e-05 4.98e-05 ...
$ Soil.NO3N.15. : num 1.50e-05 2.19e-05 2.88e-05 1.50e-05 2.88e-05 ...
$ Soil.NO3N.16. : num 1.6 1.63 1.56 1.6 1.56 ...
$ Soil.NO3N.17. : num 1.6 1.63 1.65 1.6 1.65 ...
[list output truncated]
summary(df)
CheckpointID SimulationID Defoliation Zone Clock.Today
Min. :1 Min. : 1.00 Length:90533 Length:90533 Min. :1996-10-31 12:00:00
1st Qu.:1 1st Qu.: 35.00 Class :character Class :character 1st Qu.:2000-09-14 12:00:00
Median :1 Median : 79.00 Mode :character Mode :character Median :2001-12-17 12:00:00
Mean :1 Mean : 64.44 Mean :2003-12-06 04:37:33
3rd Qu.:1 3rd Qu.: 94.00 3rd Qu.:2004-04-19 12:00:00
DiagnosticsVariables.Script.AccumPlantN DiagnosticsVariables.Script.AccumMineralisation
Min. : 0.0 Min. : -0.0216
1st Qu.:298.7 1st Qu.: 61.8094
Median :372.9 Median :141.5701
Mean :342.3 Mean :149.0996
3rd Qu.:440.7 3rd Qu.:226.8981
DiagnosticsVariables.Script.AccumDenit DiagnosticsVariables.Script.AccumFert
Min. :-121.699 Min. :0
1st Qu.: -23.301 1st Qu.:0
Median : -12.258 Median :0
Mean : -16.538 Mean :0
3rd Qu.: -4.309 3rd Qu.:0
DiagnosticsVariables.Script.AccumLeach DiagnosticsVariables.Script.AccumDetach
Min. :-34.30667 Min. :0
1st Qu.: -3.07642 1st Qu.:0
Median : -0.72422 Median :0
Mean : -2.49944 Mean :0
3rd Qu.: -0.08255 3rd Qu.:0
DiagnosticsVariables.Script.DeltaSoilOMN DiagnosticsVariables.Script.DeltaSurfaceOMN
Min. :-390.7620 Min. :0
1st Qu.:-226.8981 1st Qu.:0
Median :-141.5701 Median :0
Mean :-149.0996 Mean :0
3rd Qu.: -61.8094 3rd Qu.:0
DiagnosticsVariables.Script.DeltaSoilMineralN Lucerne.Root.NSupply.Fixation
Min. :-260.056 Min. :0
1st Qu.:-253.758 1st Qu.:0
Median :-249.031 Median :0
Mean :-212.257 Mean :0
3rd Qu.:-207.192 3rd Qu.:0
Lucerne.Root.NSupply.Reallocation Lucerne.Root.NSupply.Retranslocation Lucerne.Root.NSupply.Uptake
Min. :0 Min. :0 Min. :0
1st Qu.:0 1st Qu.:0 1st Qu.:0
Median :0 Median :0 Median :0
Mean :0 Mean :0 Mean :0
3rd Qu.:0 3rd Qu.:0 3rd Qu.:0
Soil.SoilWater.Eo Soil.SoilWater.Es SWC DiagnosticsVariables.Script.DUL Soil.SoilWater.Drainage
Min. :0.05417 Min. :0.0000 Min. :199.0 Min. :306.8 Min. : 0.0000
1st Qu.:1.10188 1st Qu.:0.3064 1st Qu.:564.3 1st Qu.:723.0 1st Qu.: 0.0000
Median :2.25177 Median :0.5258 Median :685.1 Median :744.0 Median : 0.0000
Mean :2.68944 Mean :0.7450 Mean :632.0 Mean :719.9 Mean : 0.2263
3rd Qu.:4.04160 3rd Qu.:0.8944 3rd Qu.:741.7 3rd Qu.:744.0 3rd Qu.: 0.0000
Soil.SoilWater.Runoff DiagnosticsVariables.Script.OutFlowLat DiagnosticsVariables.Script.AccumEO
Min. : 0.000000 Min. :0 Min. :-5465.649
1st Qu.: 0.000000 1st Qu.:0 1st Qu.:-2886.325
Median : 0.000000 Median :0 Median :-1706.367
Mean : 0.000998 Mean :0 Mean :-1979.696
3rd Qu.: 0.000000 3rd Qu.:0 3rd Qu.: -797.595
DiagnosticsVariables.Script.AccumEP DiagnosticsVariables.Script.AccumES
Min. :-2948.7 Min. :-1946.2489
1st Qu.:-1236.4 1st Qu.: -763.4817
Median : -758.8 Median : -456.5636
Mean : -804.8 Mean : -541.6276
3rd Qu.: -269.5 3rd Qu.: -232.5409
DiagnosticsVariables.Script.AccumDrainage DiagnosticsVariables.Script.AccumRunoff
Min. :-1043.392 Min. :-14.0933
1st Qu.: -274.840 1st Qu.: 0.0000
Median : -18.261 Median : 0.0000
Mean : -141.983 Mean : -0.2866
3rd Qu.: -5.561 3rd Qu.: 0.0000
DiagnosticsVariables.Script.AccumRainfall DiagnosticsVariables.Script.AccumIrrigation
Min. : 0.0 Min. :0
1st Qu.: 314.0 1st Qu.:0
Median : 844.5 Median :0
Mean : 983.2 Mean :0
3rd Qu.:1551.6 3rd Qu.:0
DiagnosticsVariables.Script.AccumOutflowLat DiagnosticsVariables.Script.SoilWaterDeficit
Min. :0 Min. :-464.015
1st Qu.:0 1st Qu.:-145.673
Median :0 Median : -41.094
Mean :0 Mean : -87.808
3rd Qu.:0 3rd Qu.: 8.027
Lucerne.Grain.Live.Wt Lucerne.Shell.Live.Wt StemWt Lucerne.Stem.Live.Wt Lucerne.Grain.Live.N
Min. : 0.000 Min. : 0.000 Min. : 0.0 Min. : 0.00 Min. :0.0000
1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 169.4 1st Qu.: 16.94 1st Qu.:0.0000
Median : 0.000 Median : 0.000 Median : 834.7 Median : 83.47 Median :0.0000
Mean : 6.184 Mean : 6.184 Mean : 6315.7 Mean : 631.57 Mean :0.1855
3rd Qu.: 0.000 3rd Qu.: 0.000 3rd Qu.: 6737.1 3rd Qu.: 673.71 3rd Qu.:0.0000
Lucerne.Shell.Live.N LeafWt RootWt RootTotal TapRoot
Min. :0.0000 Min. : 0.0 Min. : 0 Min. : 0 Min. : 0
1st Qu.:0.0000 1st Qu.: 329.7 1st Qu.:1101 1st Qu.: 5622 1st Qu.: 5622
Median :0.0000 Median :1001.4 Median :1323 Median :13962 Median :13962
Mean :0.1855 Mean :1584.0 Mean :1379 Mean :15000 Mean :15000
3rd Qu.:0.0000 3rd Qu.:2974.3 3rd Qu.:1679 3rd Qu.:22685 3rd Qu.:22685
lucerne.TapRoot.Senesced.Wt Lucerne.Leaf.Live.N Lucerne.Root.Live.N Lucerne.Leaf.Live.NConc
Min. : 0.00000 Min. :0.00e+00 Min. : 0.000 Min. :0.000e+00
1st Qu.: 0.01372 1st Qu.:0.00e+00 1st Qu.: 2.532 1st Qu.:0.000e+00
Median : 0.27322 Median :0.00e+00 Median : 5.586 Median :0.000e+00
Mean : 1.74374 Mean :5.45e-05 Mean : 5.760 Mean :2.326e-05
3rd Qu.: 3.15073 3rd Qu.:5.00e-09 3rd Qu.: 8.757 3rd Qu.:0.000e+00
Lucerne.Root.Live.NConc Lucerne.Root.WaterUptake ET Lucerne.Root.Depth
Min. :0.000000 Min. :0.00000 Min. : 0.0000 Min. : 0
1st Qu.:0.009987 1st Qu.:0.06868 1st Qu.: 0.8219 1st Qu.:2300
Median :0.009997 Median :0.52538 Median : 1.8017 Median :2300
Mean :0.009984 Mean :1.04966 Mean : 2.2434 Mean :2093
3rd Qu.:0.010000 3rd Qu.:1.63540 3rd Qu.: 3.3121 3rd Qu.:2300
Lucerne.Root.MaintenanceRespiration Lucerne.Leaf.CoverTotal NodeNumber Lucerne.Leaf.CoverDead
Min. :0 Min. :0.0000 Min. : 0.000 Min. :0
1st Qu.:0 1st Qu.:0.1696 1st Qu.: 3.247 1st Qu.:0
Median :0 Median :0.7459 Median : 7.685 Median :0
Mean :0 Mean :0.5988 Mean :13.592 Mean :0
3rd Qu.:0 3rd Qu.:0.9673 3rd Qu.:20.454 3rd Qu.:0
LAI Height Lucerne.Leaf.HeightFunction.DeltaHeight.Value.. SWmm.1.
Min. : 0.000 Min. : 0.00 Min. : 0.0000 Min. : 5.00
1st Qu.: 1.196 1st Qu.: 98.81 1st Qu.: 0.7509 1st Qu.:23.80
Median : 3.233 Median : 287.05 Median : 3.3655 Median :29.67
Mean : 7.953 Mean : 405.77 Mean : 6.2440 Mean :27.89
3rd Qu.:11.146 3rd Qu.: 660.58 3rd Qu.:10.8303 3rd Qu.:33.54
SWmm.2. SWmm.3. SWmm.4. SWmm.5. SWmm.6. SWmm.7.
Min. : 7.84 Min. : 8.175 Min. : 7.79 Min. : 7.338 Min. : 7.281 Min. : 7.219
1st Qu.:26.85 1st Qu.:24.177 1st Qu.:23.84 1st Qu.:24.374 1st Qu.:24.060 1st Qu.:20.677
Median :31.61 Median :25.669 Median :25.50 Median :27.000 Median :28.827 Median :25.149
Mean :29.05 Mean :26.093 Mean :24.74 Mean :24.684 Mean :25.584 Mean :24.129
3rd Qu.:33.30 3rd Qu.:31.061 3rd Qu.:28.92 3rd Qu.:27.958 3rd Qu.:29.696 3rd Qu.:29.684
SWmm.8. SWmm.9. SWmm.10. SWmm.11. SWmm.12. SWmm.13.
Min. : 7.33 Min. : 7.22 Min. : 7.303 Min. : 7.59 Min. : 8.58 Min. : 8.68
1st Qu.:19.82 1st Qu.:19.61 1st Qu.:20.850 1st Qu.:21.51 1st Qu.:22.77 1st Qu.:22.78
Median :27.70 Median :28.29 Median :29.343 Median :29.77 Median :30.43 Median :28.50
Mean :24.87 Mean :25.13 Mean :26.038 Mean :26.45 Mean :27.46 Mean :26.86
3rd Qu.:30.56 3rd Qu.:31.48 3rd Qu.:32.208 3rd Qu.:32.73 3rd Qu.:34.00 3rd Qu.:32.55
SWmm.14. SWmm.15. SWmm.16. SWmm.17. SWmm.18. SWmm.19.
Min. : 9.10 Min. :10.00 Min. :10.23 Min. : 9.83 Min. : 9.78 Min. : 9.72
1st Qu.:22.79 1st Qu.:23.05 1st Qu.:24.04 1st Qu.:25.31 1st Qu.:25.33 1st Qu.:25.38
Median :29.96 Median :31.92 Median :31.88 Median :31.11 Median :32.10 Median :32.72
Mean :27.34 Mean :28.21 Mean :29.09 Mean :29.40 Mean :29.72 Mean :29.95
3rd Qu.:33.22 3rd Qu.:33.82 3rd Qu.:34.56 3rd Qu.:34.73 3rd Qu.:35.03 3rd Qu.:35.34
SWmm.20. SWmm.21. SWmm.22. SWmm.23. Soil.NO3N.1. Soil.NO3N.2.
Min. : 9.99 Min. :10.18 Min. :10.69 Min. :15.00 Min. : 0.06101 Min. : 0.1313
1st Qu.:25.49 1st Qu.:25.02 1st Qu.:24.46 1st Qu.:26.61 1st Qu.: 1.03862 1st Qu.: 1.1728
Median :32.67 Median :32.53 Median :32.14 Median :33.01 Median : 1.87129 Median : 1.8805
Mean :29.99 Mean :29.86 Mean :29.47 Mean :31.23 Mean : 13.67401 Mean : 6.1749
3rd Qu.:35.30 3rd Qu.:35.33 3rd Qu.:36.05 3rd Qu.:37.99 3rd Qu.: 3.94112 3rd Qu.: 3.3014
Soil.NO3N.3. Soil.NO3N.4. Soil.NO3N.5. Soil.NO3N.6. Soil.NO3N.7. Soil.NO3N.8.
Min. : 0.2325 Min. : 0.2878 Min. : 0.3613 Min. : 0.4462 Min. : 0.4283 Min. : 0.4359
1st Qu.: 1.2489 1st Qu.: 1.0427 1st Qu.: 1.0431 1st Qu.: 1.1018 1st Qu.: 0.9369 1st Qu.: 0.9356
Median : 1.9019 Median : 1.4751 Median : 1.4946 Median : 1.5757 Median : 1.2619 Median : 1.2107
Mean : 5.0802 Mean : 3.2502 Mean : 2.6906 Mean : 2.4727 Mean : 2.0228 Mean : 1.9079
3rd Qu.: 3.6036 3rd Qu.: 2.6235 3rd Qu.: 2.4400 3rd Qu.: 2.4894 3rd Qu.: 1.9566 3rd Qu.: 1.8009
Soil.NO3N.9. Soil.NO3N.10. Soil.NO3N.11. Soil.NO3N.12. Soil.NO3N.13.
Min. : 0.3155 Min. : 0.000001 Min. : 0.000001 Min. : 0.000002 Min. : 0.000002
1st Qu.: 0.8903 1st Qu.: 0.622100 1st Qu.: 0.488031 1st Qu.: 0.446598 1st Qu.: 0.379448
Median : 1.1076 Median : 0.775539 Median : 0.680991 Median : 0.609676 Median : 0.539652
Mean : 1.7549 Mean : 1.366729 Mean : 1.189142 Mean : 1.075397 Mean : 0.983475
3rd Qu.: 1.6339 3rd Qu.: 1.141636 3rd Qu.: 0.990307 3rd Qu.: 0.875613 3rd Qu.: 0.777594
Soil.NO3N.14. Soil.NO3N.15. Soil.NO3N.16. Soil.NO3N.17. Soil.NO3N.18. Soil.NO3N.19.
Min. :0.000002 Min. :0.000002 Min. :0.06765 Min. :0.1333 Min. :0.0975 Min. :0.07629
1st Qu.:0.315068 1st Qu.:0.310278 1st Qu.:0.38640 1st Qu.:0.3444 1st Qu.:0.3133 1st Qu.:0.29036
Median :0.515182 Median :0.453778 Median :0.47428 Median :0.4320 Median :0.3975 Median :0.37335
Mean :0.921146 Mean :0.862362 Mean :0.85440 Mean :0.7970 Mean :0.7356 Mean :0.69518
3rd Qu.:0.737127 3rd Qu.:0.663963 3rd Qu.:0.79366 3rd Qu.:0.9047 3rd Qu.:0.8852 3rd Qu.:0.86161
Soil.NO3N.20. Soil.NO3N.21. Soil.NO3N.22. Soil.NO3N.23.
Min. :0.0975 Min. :0.0975 Min. :0.09492 Min. :0.082
1st Qu.:0.2734 1st Qu.:0.2570 1st Qu.:0.25077 1st Qu.:0.243
Median :0.3609 Median :0.3660 Median :0.44842 Median :0.498
Mean :0.6699 Mean :0.6560 Mean :0.67946 Mean :0.736
3rd Qu.:0.8714 3rd Qu.:0.8949 3rd Qu.:0.94984 3rd Qu.:1.069
DiagnosticsVariables.Script.SoilNitrogenContent Lucerne.Arbitrator.N.TotalPlantDemand
Min. : 12.21 Min. :0.00000
1st Qu.: 18.45 1st Qu.:0.01242
Median : 22.70 Median :0.10362
Mean : 53.39 Mean :0.19978
3rd Qu.: 55.95 3rd Qu.:0.32100
DiagnosticsVariables.Script.FomN DiagnosticsVariables.Script.HumN DiagnosticsVariables.Script.BiomN
Min. : 0.08285 Min. :20076 Min. : 79.56
1st Qu.: 0.55395 1st Qu.:22764 1st Qu.:106.18
Median : 1.30829 Median :22828 Median :131.53
Mean : 3.96381 Mean :22724 Mean :132.07
3rd Qu.: 4.18246 3rd Qu.:22883 3rd Qu.:160.53
DiagnosticsVariables.Script.DltNMinRes DiagnosticsVariables.Script.DltNMinTot Lucerne.Leaf.Fw
Min. :0 Min. :-0.02068 Min. :0.04677
1st Qu.:0 1st Qu.: 0.09779 1st Qu.:1.00000
Median :0 Median : 0.17551 Median :1.00000
Mean :0 Mean : 0.19576 Mean :0.96421
3rd Qu.:0 3rd Qu.: 0.27342 3rd Qu.:1.00000
Lucerne.Leaf.Fn Lucerne.Phenology.CurrentPhaseName Lucerne.Phenology.CurrentStageName
Min. :0.0000000 Length:90533 Length:90533
1st Qu.:0.0000000 Class :character Class :character
Median :0.0000000 Mode :character Mode :character
Mean :0.0280805
3rd Qu.:0.0000002
Lucerne.Phenology.Stage Lucerne.Phenology.DaysAfterCutting.Value..
Min. :1.000 Min. : 0
1st Qu.:4.460 1st Qu.: 18
Median :5.113 Median : 37
Mean :5.681 Mean : 35
3rd Qu.:6.434 3rd Qu.: 46
Lucerne.Phenology.FloweringDaysAfterCutting.Value.. Lucerne.Pod.Wt Lucerne.Pod.N shootbiomass
Min. : 0.00 Min. : 0.00 Min. :0.0000 Min. : 0.0
1st Qu.: 0.00 1st Qu.: 0.00 1st Qu.:0.0000 1st Qu.: 498.1
Median : 0.00 Median : 0.00 Median :0.0000 Median : 1835.2
Mean : 24.89 Mean : 12.37 Mean :0.3711 Mean : 8023.4
3rd Qu.: 46.00 3rd Qu.: 0.00 3rd Qu.:0.0000 3rd Qu.: 9703.8
Lucerne.Leaf.LAIFunction.Value.. Lucerne.Root.LengthDensity.1. Lucerne.Root.LengthDensity.2.
Min. : 0.000 Min. :0.00000 Min. :0.000000
1st Qu.: 1.196 1st Qu.:0.02337 1st Qu.:0.006188
Median : 3.233 Median :0.03911 Median :0.012742
Mean : 7.953 Mean :0.03493 Mean :0.016347
3rd Qu.:11.146 3rd Qu.:0.04474 3rd Qu.:0.025018
Lucerne.Root.LengthDensity.3. Lucerne.Root.LengthDensity.4. Lucerne.Root.LengthDensity.5.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.004121 1st Qu.:0.004006 1st Qu.:0.004412
Median :0.009291 Median :0.009005 Median :0.010116
Mean :0.011332 Mean :0.010697 Mean :0.011553
3rd Qu.:0.017243 3rd Qu.:0.016578 3rd Qu.:0.018546
Lucerne.Root.LengthDensity.6. Lucerne.Root.LengthDensity.7. Lucerne.Root.LengthDensity.8.
Min. :0.000000 Min. :0.000000 Min. :0.00000
1st Qu.:0.004776 1st Qu.:0.004625 1st Qu.:0.00480
Median :0.012072 Median :0.011890 Median :0.01227
Mean :0.013187 Mean :0.012629 Mean :0.01272
3rd Qu.:0.021161 3rd Qu.:0.020755 3rd Qu.:0.01969
Lucerne.Root.LengthDensity.9. Lucerne.Root.LengthDensity.10. Lucerne.Root.LengthDensity.11.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.004333 1st Qu.:0.003947 1st Qu.:0.003698
Median :0.010792 Median :0.010234 Median :0.008700
Mean :0.011317 Mean :0.010436 Mean :0.009641
3rd Qu.:0.016236 3rd Qu.:0.015302 3rd Qu.:0.014021
Lucerne.Root.LengthDensity.12. Lucerne.Root.LengthDensity.13. Lucerne.Root.LengthDensity.14.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.003349 1st Qu.:0.003217 1st Qu.:0.003024
Median :0.008141 Median :0.007350 Median :0.007787
Mean :0.008249 Mean :0.008167 Mean :0.008588
3rd Qu.:0.012517 3rd Qu.:0.011869 3rd Qu.:0.012847
Lucerne.Root.LengthDensity.15. Lucerne.Root.LengthDensity.16. Lucerne.Root.LengthDensity.17.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.002521 1st Qu.:0.002326 1st Qu.:0.001922
Median :0.006279 Median :0.006056 Median :0.003525
Mean :0.007103 Mean :0.006403 Mean :0.004863
3rd Qu.:0.010472 3rd Qu.:0.008907 3rd Qu.:0.006937
Lucerne.Root.LengthDensity.18. Lucerne.Root.LengthDensity.19. Lucerne.Root.LengthDensity.20.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.001478 1st Qu.:0.001189 1st Qu.:0.001048
Median :0.003466 Median :0.003464 Median :0.003478
Mean :0.004212 Mean :0.003752 Mean :0.003745
3rd Qu.:0.005825 3rd Qu.:0.005487 3rd Qu.:0.005406
Lucerne.Root.LengthDensity.21. Lucerne.Root.LengthDensity.22. Lucerne.Root.LengthDensity.23.
Min. :0.0000000 Min. :0.000000 Min. :0.000
1st Qu.:0.0009944 1st Qu.:0.001057 1st Qu.:0.001
Median :0.0042995 Median :0.006886 Median :0.008
Mean :0.0042554 Mean :0.007607 Mean :0.009
3rd Qu.:0.0059690 3rd Qu.:0.011035 3rd Qu.:0.013
Soil.SoilWater.WaterTable Lucerne.AboveGround.Wt Lucerne.AboveGround.N Soil.SoilWater.ESW.1.
Min. : 300 Min. : 0.00 Min. : 0.0000 Min. : 0.00
1st Qu.: 600 1st Qu.: 49.81 1st Qu.: 0.5081 1st Qu.:16.12
Median :1910 Median : 183.52 Median : 2.5040 Median :22.02
Mean :1535 Mean : 802.34 Mean :19.2180 Mean :20.14
3rd Qu.:2300 3rd Qu.: 970.38 3rd Qu.:20.2114 3rd Qu.:25.93
Soil.SoilWater.ESW.2. Soil.SoilWater.ESW.3. Soil.SoilWater.ESW.4. Soil.SoilWater.ESW.5.
Min. : 0.04039 Min. : 0.3954 Min. : 0.1298 Min. : 0.1083
1st Qu.:19.05110 1st Qu.:17.1772 1st Qu.:16.8361 1st Qu.:17.3740
Median :23.81350 Median :18.6692 Median :18.5024 Median :20.0000
Mean :21.23478 Mean :19.0617 Mean :17.7148 Mean :17.6743
3rd Qu.:25.50340 3rd Qu.:24.0606 3rd Qu.:21.9175 3rd Qu.:20.9585
Soil.SoilWater.ESW.6. Soil.SoilWater.ESW.7. Soil.SoilWater.ESW.8. Soil.SoilWater.ESW.9.
Min. : 0.02136 Min. : 0.03887 Min. : 0.00 Min. : 0.00
1st Qu.:17.06030 1st Qu.:13.67662 1st Qu.:12.82 1st Qu.:12.61
Median :21.82681 Median :18.14935 Median :20.70 Median :21.29
Mean :18.57358 Mean :17.12142 Mean :17.86 Mean :18.12
3rd Qu.:22.69583 3rd Qu.:22.68353 3rd Qu.:23.56 3rd Qu.:24.48
Soil.SoilWater.ESW.10. Soil.SoilWater.ESW.11. Soil.SoilWater.ESW.12. Soil.SoilWater.ESW.13.
Min. : 0.02268 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:13.85029 1st Qu.:14.51 1st Qu.:15.77 1st Qu.:14.78
Median :22.34308 Median :22.77 Median :23.43 Median :20.50
Mean :19.02666 Mean :19.42 Mean :20.39 Mean :18.84
3rd Qu.:25.20769 3rd Qu.:25.73 3rd Qu.:27.00 3rd Qu.:24.55
Soil.SoilWater.ESW.14. Soil.SoilWater.ESW.15. Soil.SoilWater.ESW.16. Soil.SoilWater.ESW.17.
Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:14.79 1st Qu.:15.05 1st Qu.:15.04 1st Qu.:16.31
Median :21.96 Median :23.92 Median :22.88 Median :22.11
Mean :19.30 Mean :20.13 Mean :20.04 Mean :20.36
3rd Qu.:25.22 3rd Qu.:25.82 3rd Qu.:25.56 3rd Qu.:25.73
Soil.SoilWater.ESW.18. Soil.SoilWater.ESW.19. Soil.SoilWater.ESW.20. Soil.SoilWater.ESW.21.
Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:16.33 1st Qu.:16.38 1st Qu.:17.42 1st Qu.:15.93
Median :23.10 Median :23.72 Median :24.60 Median :23.43
Mean :20.69 Mean :20.92 Mean :21.80 Mean :20.70
3rd Qu.:26.03 3rd Qu.:26.34 3rd Qu.:27.24 3rd Qu.:26.24
Soil.SoilWater.ESW.22. Soil.SoilWater.ESW.23. Lucerne.TapRoot.Live.StructuralWt
Min. : 0.00 Min. : 6.00 Min. : 0.0
1st Qu.:15.24 1st Qu.:17.48 1st Qu.:100.2
Median :23.04 Median :23.77 Median :123.6
Mean :20.29 Mean :22.12 Mean :129.8
3rd Qu.:26.97 3rd Qu.:28.99 3rd Qu.:160.2
Lucerne.TapRoot.Live.StorageWt Water SowingDate FD SD1
Min. : 0.000 Length:90533 Length:90533 Length:90533 Length:90533
1st Qu.: 3.793 Class :character Class :character Class :character Class :character
Median : 6.721 Mode :character Mode :character Mode :character Mode :character
Mean : 8.124
3rd Qu.: 9.945
Cutting SS LL
Length:90533 Length:90533 Length:90533
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
[ reached getOption("max.print") -- omitted 2 rows ]
head(df) # simulation results
get sim names (different table)
merge names
remove unecessary variables
simNameDf <- as.data.frame (GetApsimNGTable(db.address,"_Simulations"))
myDb <- merge(df, simNameDf, by.x= c("SimulationID"), by.y= c("ID"))
#str(myDb)
head(myDb)
summary(myDb)
SimulationID CheckpointID Defoliation Zone Clock.Today
Min. : 1.00 Min. :1 Length:90533 Length:90533 Min. :1996-10-31 12:00:00
1st Qu.: 35.00 1st Qu.:1 Class :character Class :character 1st Qu.:2000-09-14 12:00:00
Median : 79.00 Median :1 Mode :character Mode :character Median :2001-12-17 12:00:00
Mean : 64.44 Mean :1 Mean :2003-12-06 04:37:33
3rd Qu.: 94.00 3rd Qu.:1 3rd Qu.:2004-04-19 12:00:00
DiagnosticsVariables.Script.AccumPlantN DiagnosticsVariables.Script.AccumMineralisation
Min. : 0.0 Min. : -0.0216
1st Qu.:298.7 1st Qu.: 61.8094
Median :372.9 Median :141.5701
Mean :342.3 Mean :149.0996
3rd Qu.:440.7 3rd Qu.:226.8981
DiagnosticsVariables.Script.AccumDenit DiagnosticsVariables.Script.AccumFert
Min. :-121.699 Min. :0
1st Qu.: -23.301 1st Qu.:0
Median : -12.258 Median :0
Mean : -16.538 Mean :0
3rd Qu.: -4.309 3rd Qu.:0
DiagnosticsVariables.Script.AccumLeach DiagnosticsVariables.Script.AccumDetach
Min. :-34.30667 Min. :0
1st Qu.: -3.07642 1st Qu.:0
Median : -0.72422 Median :0
Mean : -2.49944 Mean :0
3rd Qu.: -0.08255 3rd Qu.:0
DiagnosticsVariables.Script.DeltaSoilOMN DiagnosticsVariables.Script.DeltaSurfaceOMN
Min. :-390.7620 Min. :0
1st Qu.:-226.8981 1st Qu.:0
Median :-141.5701 Median :0
Mean :-149.0996 Mean :0
3rd Qu.: -61.8094 3rd Qu.:0
DiagnosticsVariables.Script.DeltaSoilMineralN Lucerne.Root.NSupply.Fixation
Min. :-260.056 Min. :0
1st Qu.:-253.758 1st Qu.:0
Median :-249.031 Median :0
Mean :-212.257 Mean :0
3rd Qu.:-207.192 3rd Qu.:0
Lucerne.Root.NSupply.Reallocation Lucerne.Root.NSupply.Retranslocation Lucerne.Root.NSupply.Uptake
Min. :0 Min. :0 Min. :0
1st Qu.:0 1st Qu.:0 1st Qu.:0
Median :0 Median :0 Median :0
Mean :0 Mean :0 Mean :0
3rd Qu.:0 3rd Qu.:0 3rd Qu.:0
Soil.SoilWater.Eo Soil.SoilWater.Es SWC DiagnosticsVariables.Script.DUL Soil.SoilWater.Drainage
Min. :0.05417 Min. :0.0000 Min. :199.0 Min. :306.8 Min. : 0.0000
1st Qu.:1.10188 1st Qu.:0.3064 1st Qu.:564.3 1st Qu.:723.0 1st Qu.: 0.0000
Median :2.25177 Median :0.5258 Median :685.1 Median :744.0 Median : 0.0000
Mean :2.68944 Mean :0.7450 Mean :632.0 Mean :719.9 Mean : 0.2263
3rd Qu.:4.04160 3rd Qu.:0.8944 3rd Qu.:741.7 3rd Qu.:744.0 3rd Qu.: 0.0000
Soil.SoilWater.Runoff DiagnosticsVariables.Script.OutFlowLat DiagnosticsVariables.Script.AccumEO
Min. : 0.000000 Min. :0 Min. :-5465.649
1st Qu.: 0.000000 1st Qu.:0 1st Qu.:-2886.325
Median : 0.000000 Median :0 Median :-1706.367
Mean : 0.000998 Mean :0 Mean :-1979.696
3rd Qu.: 0.000000 3rd Qu.:0 3rd Qu.: -797.595
DiagnosticsVariables.Script.AccumEP DiagnosticsVariables.Script.AccumES
Min. :-2948.7 Min. :-1946.2489
1st Qu.:-1236.4 1st Qu.: -763.4817
Median : -758.8 Median : -456.5636
Mean : -804.8 Mean : -541.6276
3rd Qu.: -269.5 3rd Qu.: -232.5409
DiagnosticsVariables.Script.AccumDrainage DiagnosticsVariables.Script.AccumRunoff
Min. :-1043.392 Min. :-14.0933
1st Qu.: -274.840 1st Qu.: 0.0000
Median : -18.261 Median : 0.0000
Mean : -141.983 Mean : -0.2866
3rd Qu.: -5.561 3rd Qu.: 0.0000
DiagnosticsVariables.Script.AccumRainfall DiagnosticsVariables.Script.AccumIrrigation
Min. : 0.0 Min. :0
1st Qu.: 314.0 1st Qu.:0
Median : 844.5 Median :0
Mean : 983.2 Mean :0
3rd Qu.:1551.6 3rd Qu.:0
DiagnosticsVariables.Script.AccumOutflowLat DiagnosticsVariables.Script.SoilWaterDeficit
Min. :0 Min. :-464.015
1st Qu.:0 1st Qu.:-145.673
Median :0 Median : -41.094
Mean :0 Mean : -87.808
3rd Qu.:0 3rd Qu.: 8.027
Lucerne.Grain.Live.Wt Lucerne.Shell.Live.Wt StemWt Lucerne.Stem.Live.Wt Lucerne.Grain.Live.N
Min. : 0.000 Min. : 0.000 Min. : 0.0 Min. : 0.00 Min. :0.0000
1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 169.4 1st Qu.: 16.94 1st Qu.:0.0000
Median : 0.000 Median : 0.000 Median : 834.7 Median : 83.47 Median :0.0000
Mean : 6.184 Mean : 6.184 Mean : 6315.7 Mean : 631.57 Mean :0.1855
3rd Qu.: 0.000 3rd Qu.: 0.000 3rd Qu.: 6737.1 3rd Qu.: 673.71 3rd Qu.:0.0000
Lucerne.Shell.Live.N LeafWt RootWt RootTotal TapRoot
Min. :0.0000 Min. : 0.0 Min. : 0 Min. : 0 Min. : 0
1st Qu.:0.0000 1st Qu.: 329.7 1st Qu.:1101 1st Qu.: 5622 1st Qu.: 5622
Median :0.0000 Median :1001.4 Median :1323 Median :13962 Median :13962
Mean :0.1855 Mean :1584.0 Mean :1379 Mean :15000 Mean :15000
3rd Qu.:0.0000 3rd Qu.:2974.3 3rd Qu.:1679 3rd Qu.:22685 3rd Qu.:22685
lucerne.TapRoot.Senesced.Wt Lucerne.Leaf.Live.N Lucerne.Root.Live.N Lucerne.Leaf.Live.NConc
Min. : 0.00000 Min. :0.00e+00 Min. : 0.000 Min. :0.000e+00
1st Qu.: 0.01372 1st Qu.:0.00e+00 1st Qu.: 2.532 1st Qu.:0.000e+00
Median : 0.27322 Median :0.00e+00 Median : 5.586 Median :0.000e+00
Mean : 1.74374 Mean :5.45e-05 Mean : 5.760 Mean :2.326e-05
3rd Qu.: 3.15073 3rd Qu.:5.00e-09 3rd Qu.: 8.757 3rd Qu.:0.000e+00
Lucerne.Root.Live.NConc Lucerne.Root.WaterUptake ET Lucerne.Root.Depth
Min. :0.000000 Min. :0.00000 Min. : 0.0000 Min. : 0
1st Qu.:0.009987 1st Qu.:0.06868 1st Qu.: 0.8219 1st Qu.:2300
Median :0.009997 Median :0.52538 Median : 1.8017 Median :2300
Mean :0.009984 Mean :1.04966 Mean : 2.2434 Mean :2093
3rd Qu.:0.010000 3rd Qu.:1.63540 3rd Qu.: 3.3121 3rd Qu.:2300
Lucerne.Root.MaintenanceRespiration Lucerne.Leaf.CoverTotal NodeNumber Lucerne.Leaf.CoverDead
Min. :0 Min. :0.0000 Min. : 0.000 Min. :0
1st Qu.:0 1st Qu.:0.1696 1st Qu.: 3.247 1st Qu.:0
Median :0 Median :0.7459 Median : 7.685 Median :0
Mean :0 Mean :0.5988 Mean :13.592 Mean :0
3rd Qu.:0 3rd Qu.:0.9673 3rd Qu.:20.454 3rd Qu.:0
LAI Height Lucerne.Leaf.HeightFunction.DeltaHeight.Value.. SWmm.1.
Min. : 0.000 Min. : 0.00 Min. : 0.0000 Min. : 5.00
1st Qu.: 1.196 1st Qu.: 98.81 1st Qu.: 0.7509 1st Qu.:23.80
Median : 3.233 Median : 287.05 Median : 3.3655 Median :29.67
Mean : 7.953 Mean : 405.77 Mean : 6.2440 Mean :27.89
3rd Qu.:11.146 3rd Qu.: 660.58 3rd Qu.:10.8303 3rd Qu.:33.54
SWmm.2. SWmm.3. SWmm.4. SWmm.5. SWmm.6. SWmm.7.
Min. : 7.84 Min. : 8.175 Min. : 7.79 Min. : 7.338 Min. : 7.281 Min. : 7.219
1st Qu.:26.85 1st Qu.:24.177 1st Qu.:23.84 1st Qu.:24.374 1st Qu.:24.060 1st Qu.:20.677
Median :31.61 Median :25.669 Median :25.50 Median :27.000 Median :28.827 Median :25.149
Mean :29.05 Mean :26.093 Mean :24.74 Mean :24.684 Mean :25.584 Mean :24.129
3rd Qu.:33.30 3rd Qu.:31.061 3rd Qu.:28.92 3rd Qu.:27.958 3rd Qu.:29.696 3rd Qu.:29.684
SWmm.8. SWmm.9. SWmm.10. SWmm.11. SWmm.12. SWmm.13.
Min. : 7.33 Min. : 7.22 Min. : 7.303 Min. : 7.59 Min. : 8.58 Min. : 8.68
1st Qu.:19.82 1st Qu.:19.61 1st Qu.:20.850 1st Qu.:21.51 1st Qu.:22.77 1st Qu.:22.78
Median :27.70 Median :28.29 Median :29.343 Median :29.77 Median :30.43 Median :28.50
Mean :24.87 Mean :25.13 Mean :26.038 Mean :26.45 Mean :27.46 Mean :26.86
3rd Qu.:30.56 3rd Qu.:31.48 3rd Qu.:32.208 3rd Qu.:32.73 3rd Qu.:34.00 3rd Qu.:32.55
SWmm.14. SWmm.15. SWmm.16. SWmm.17. SWmm.18. SWmm.19.
Min. : 9.10 Min. :10.00 Min. :10.23 Min. : 9.83 Min. : 9.78 Min. : 9.72
1st Qu.:22.79 1st Qu.:23.05 1st Qu.:24.04 1st Qu.:25.31 1st Qu.:25.33 1st Qu.:25.38
Median :29.96 Median :31.92 Median :31.88 Median :31.11 Median :32.10 Median :32.72
Mean :27.34 Mean :28.21 Mean :29.09 Mean :29.40 Mean :29.72 Mean :29.95
3rd Qu.:33.22 3rd Qu.:33.82 3rd Qu.:34.56 3rd Qu.:34.73 3rd Qu.:35.03 3rd Qu.:35.34
SWmm.20. SWmm.21. SWmm.22. SWmm.23. Soil.NO3N.1. Soil.NO3N.2.
Min. : 9.99 Min. :10.18 Min. :10.69 Min. :15.00 Min. : 0.06101 Min. : 0.1313
1st Qu.:25.49 1st Qu.:25.02 1st Qu.:24.46 1st Qu.:26.61 1st Qu.: 1.03862 1st Qu.: 1.1728
Median :32.67 Median :32.53 Median :32.14 Median :33.01 Median : 1.87129 Median : 1.8805
Mean :29.99 Mean :29.86 Mean :29.47 Mean :31.23 Mean : 13.67401 Mean : 6.1749
3rd Qu.:35.30 3rd Qu.:35.33 3rd Qu.:36.05 3rd Qu.:37.99 3rd Qu.: 3.94112 3rd Qu.: 3.3014
Soil.NO3N.3. Soil.NO3N.4. Soil.NO3N.5. Soil.NO3N.6. Soil.NO3N.7. Soil.NO3N.8.
Min. : 0.2325 Min. : 0.2878 Min. : 0.3613 Min. : 0.4462 Min. : 0.4283 Min. : 0.4359
1st Qu.: 1.2489 1st Qu.: 1.0427 1st Qu.: 1.0431 1st Qu.: 1.1018 1st Qu.: 0.9369 1st Qu.: 0.9356
Median : 1.9019 Median : 1.4751 Median : 1.4946 Median : 1.5757 Median : 1.2619 Median : 1.2107
Mean : 5.0802 Mean : 3.2502 Mean : 2.6906 Mean : 2.4727 Mean : 2.0228 Mean : 1.9079
3rd Qu.: 3.6036 3rd Qu.: 2.6235 3rd Qu.: 2.4400 3rd Qu.: 2.4894 3rd Qu.: 1.9566 3rd Qu.: 1.8009
Soil.NO3N.9. Soil.NO3N.10. Soil.NO3N.11. Soil.NO3N.12. Soil.NO3N.13.
Min. : 0.3155 Min. : 0.000001 Min. : 0.000001 Min. : 0.000002 Min. : 0.000002
1st Qu.: 0.8903 1st Qu.: 0.622100 1st Qu.: 0.488031 1st Qu.: 0.446598 1st Qu.: 0.379448
Median : 1.1076 Median : 0.775539 Median : 0.680991 Median : 0.609676 Median : 0.539652
Mean : 1.7549 Mean : 1.366729 Mean : 1.189142 Mean : 1.075397 Mean : 0.983475
3rd Qu.: 1.6339 3rd Qu.: 1.141636 3rd Qu.: 0.990307 3rd Qu.: 0.875613 3rd Qu.: 0.777594
Soil.NO3N.14. Soil.NO3N.15. Soil.NO3N.16. Soil.NO3N.17. Soil.NO3N.18. Soil.NO3N.19.
Min. :0.000002 Min. :0.000002 Min. :0.06765 Min. :0.1333 Min. :0.0975 Min. :0.07629
1st Qu.:0.315068 1st Qu.:0.310278 1st Qu.:0.38640 1st Qu.:0.3444 1st Qu.:0.3133 1st Qu.:0.29036
Median :0.515182 Median :0.453778 Median :0.47428 Median :0.4320 Median :0.3975 Median :0.37335
Mean :0.921146 Mean :0.862362 Mean :0.85440 Mean :0.7970 Mean :0.7356 Mean :0.69518
3rd Qu.:0.737127 3rd Qu.:0.663963 3rd Qu.:0.79366 3rd Qu.:0.9047 3rd Qu.:0.8852 3rd Qu.:0.86161
Soil.NO3N.20. Soil.NO3N.21. Soil.NO3N.22. Soil.NO3N.23.
Min. :0.0975 Min. :0.0975 Min. :0.09492 Min. :0.082
1st Qu.:0.2734 1st Qu.:0.2570 1st Qu.:0.25077 1st Qu.:0.243
Median :0.3609 Median :0.3660 Median :0.44842 Median :0.498
Mean :0.6699 Mean :0.6560 Mean :0.67946 Mean :0.736
3rd Qu.:0.8714 3rd Qu.:0.8949 3rd Qu.:0.94984 3rd Qu.:1.069
DiagnosticsVariables.Script.SoilNitrogenContent Lucerne.Arbitrator.N.TotalPlantDemand
Min. : 12.21 Min. :0.00000
1st Qu.: 18.45 1st Qu.:0.01242
Median : 22.70 Median :0.10362
Mean : 53.39 Mean :0.19978
3rd Qu.: 55.95 3rd Qu.:0.32100
DiagnosticsVariables.Script.FomN DiagnosticsVariables.Script.HumN DiagnosticsVariables.Script.BiomN
Min. : 0.08285 Min. :20076 Min. : 79.56
1st Qu.: 0.55395 1st Qu.:22764 1st Qu.:106.18
Median : 1.30829 Median :22828 Median :131.53
Mean : 3.96381 Mean :22724 Mean :132.07
3rd Qu.: 4.18246 3rd Qu.:22883 3rd Qu.:160.53
DiagnosticsVariables.Script.DltNMinRes DiagnosticsVariables.Script.DltNMinTot Lucerne.Leaf.Fw
Min. :0 Min. :-0.02068 Min. :0.04677
1st Qu.:0 1st Qu.: 0.09779 1st Qu.:1.00000
Median :0 Median : 0.17551 Median :1.00000
Mean :0 Mean : 0.19576 Mean :0.96421
3rd Qu.:0 3rd Qu.: 0.27342 3rd Qu.:1.00000
Lucerne.Leaf.Fn Lucerne.Phenology.CurrentPhaseName Lucerne.Phenology.CurrentStageName
Min. :0.0000000 Length:90533 Length:90533
1st Qu.:0.0000000 Class :character Class :character
Median :0.0000000 Mode :character Mode :character
Mean :0.0280805
3rd Qu.:0.0000002
Lucerne.Phenology.Stage Lucerne.Phenology.DaysAfterCutting.Value..
Min. :1.000 Min. : 0
1st Qu.:4.460 1st Qu.: 18
Median :5.113 Median : 37
Mean :5.681 Mean : 35
3rd Qu.:6.434 3rd Qu.: 46
Lucerne.Phenology.FloweringDaysAfterCutting.Value.. Lucerne.Pod.Wt Lucerne.Pod.N shootbiomass
Min. : 0.00 Min. : 0.00 Min. :0.0000 Min. : 0.0
1st Qu.: 0.00 1st Qu.: 0.00 1st Qu.:0.0000 1st Qu.: 498.1
Median : 0.00 Median : 0.00 Median :0.0000 Median : 1835.2
Mean : 24.89 Mean : 12.37 Mean :0.3711 Mean : 8023.4
3rd Qu.: 46.00 3rd Qu.: 0.00 3rd Qu.:0.0000 3rd Qu.: 9703.8
Lucerne.Leaf.LAIFunction.Value.. Lucerne.Root.LengthDensity.1. Lucerne.Root.LengthDensity.2.
Min. : 0.000 Min. :0.00000 Min. :0.000000
1st Qu.: 1.196 1st Qu.:0.02337 1st Qu.:0.006188
Median : 3.233 Median :0.03911 Median :0.012742
Mean : 7.953 Mean :0.03493 Mean :0.016347
3rd Qu.:11.146 3rd Qu.:0.04474 3rd Qu.:0.025018
Lucerne.Root.LengthDensity.3. Lucerne.Root.LengthDensity.4. Lucerne.Root.LengthDensity.5.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.004121 1st Qu.:0.004006 1st Qu.:0.004412
Median :0.009291 Median :0.009005 Median :0.010116
Mean :0.011332 Mean :0.010697 Mean :0.011553
3rd Qu.:0.017243 3rd Qu.:0.016578 3rd Qu.:0.018546
Lucerne.Root.LengthDensity.6. Lucerne.Root.LengthDensity.7. Lucerne.Root.LengthDensity.8.
Min. :0.000000 Min. :0.000000 Min. :0.00000
1st Qu.:0.004776 1st Qu.:0.004625 1st Qu.:0.00480
Median :0.012072 Median :0.011890 Median :0.01227
Mean :0.013187 Mean :0.012629 Mean :0.01272
3rd Qu.:0.021161 3rd Qu.:0.020755 3rd Qu.:0.01969
Lucerne.Root.LengthDensity.9. Lucerne.Root.LengthDensity.10. Lucerne.Root.LengthDensity.11.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.004333 1st Qu.:0.003947 1st Qu.:0.003698
Median :0.010792 Median :0.010234 Median :0.008700
Mean :0.011317 Mean :0.010436 Mean :0.009641
3rd Qu.:0.016236 3rd Qu.:0.015302 3rd Qu.:0.014021
Lucerne.Root.LengthDensity.12. Lucerne.Root.LengthDensity.13. Lucerne.Root.LengthDensity.14.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.003349 1st Qu.:0.003217 1st Qu.:0.003024
Median :0.008141 Median :0.007350 Median :0.007787
Mean :0.008249 Mean :0.008167 Mean :0.008588
3rd Qu.:0.012517 3rd Qu.:0.011869 3rd Qu.:0.012847
Lucerne.Root.LengthDensity.15. Lucerne.Root.LengthDensity.16. Lucerne.Root.LengthDensity.17.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.002521 1st Qu.:0.002326 1st Qu.:0.001922
Median :0.006279 Median :0.006056 Median :0.003525
Mean :0.007103 Mean :0.006403 Mean :0.004863
3rd Qu.:0.010472 3rd Qu.:0.008907 3rd Qu.:0.006937
Lucerne.Root.LengthDensity.18. Lucerne.Root.LengthDensity.19. Lucerne.Root.LengthDensity.20.
Min. :0.000000 Min. :0.000000 Min. :0.000000
1st Qu.:0.001478 1st Qu.:0.001189 1st Qu.:0.001048
Median :0.003466 Median :0.003464 Median :0.003478
Mean :0.004212 Mean :0.003752 Mean :0.003745
3rd Qu.:0.005825 3rd Qu.:0.005487 3rd Qu.:0.005406
Lucerne.Root.LengthDensity.21. Lucerne.Root.LengthDensity.22. Lucerne.Root.LengthDensity.23.
Min. :0.0000000 Min. :0.000000 Min. :0.000
1st Qu.:0.0009944 1st Qu.:0.001057 1st Qu.:0.001
Median :0.0042995 Median :0.006886 Median :0.008
Mean :0.0042554 Mean :0.007607 Mean :0.009
3rd Qu.:0.0059690 3rd Qu.:0.011035 3rd Qu.:0.013
Soil.SoilWater.WaterTable Lucerne.AboveGround.Wt Lucerne.AboveGround.N Soil.SoilWater.ESW.1.
Min. : 300 Min. : 0.00 Min. : 0.0000 Min. : 0.00
1st Qu.: 600 1st Qu.: 49.81 1st Qu.: 0.5081 1st Qu.:16.12
Median :1910 Median : 183.52 Median : 2.5040 Median :22.02
Mean :1535 Mean : 802.34 Mean :19.2180 Mean :20.14
3rd Qu.:2300 3rd Qu.: 970.38 3rd Qu.:20.2114 3rd Qu.:25.93
Soil.SoilWater.ESW.2. Soil.SoilWater.ESW.3. Soil.SoilWater.ESW.4. Soil.SoilWater.ESW.5.
Min. : 0.04039 Min. : 0.3954 Min. : 0.1298 Min. : 0.1083
1st Qu.:19.05110 1st Qu.:17.1772 1st Qu.:16.8361 1st Qu.:17.3740
Median :23.81350 Median :18.6692 Median :18.5024 Median :20.0000
Mean :21.23478 Mean :19.0617 Mean :17.7148 Mean :17.6743
3rd Qu.:25.50340 3rd Qu.:24.0606 3rd Qu.:21.9175 3rd Qu.:20.9585
Soil.SoilWater.ESW.6. Soil.SoilWater.ESW.7. Soil.SoilWater.ESW.8. Soil.SoilWater.ESW.9.
Min. : 0.02136 Min. : 0.03887 Min. : 0.00 Min. : 0.00
1st Qu.:17.06030 1st Qu.:13.67662 1st Qu.:12.82 1st Qu.:12.61
Median :21.82681 Median :18.14935 Median :20.70 Median :21.29
Mean :18.57358 Mean :17.12142 Mean :17.86 Mean :18.12
3rd Qu.:22.69583 3rd Qu.:22.68353 3rd Qu.:23.56 3rd Qu.:24.48
Soil.SoilWater.ESW.10. Soil.SoilWater.ESW.11. Soil.SoilWater.ESW.12. Soil.SoilWater.ESW.13.
Min. : 0.02268 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:13.85029 1st Qu.:14.51 1st Qu.:15.77 1st Qu.:14.78
Median :22.34308 Median :22.77 Median :23.43 Median :20.50
Mean :19.02666 Mean :19.42 Mean :20.39 Mean :18.84
3rd Qu.:25.20769 3rd Qu.:25.73 3rd Qu.:27.00 3rd Qu.:24.55
Soil.SoilWater.ESW.14. Soil.SoilWater.ESW.15. Soil.SoilWater.ESW.16. Soil.SoilWater.ESW.17.
Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:14.79 1st Qu.:15.05 1st Qu.:15.04 1st Qu.:16.31
Median :21.96 Median :23.92 Median :22.88 Median :22.11
Mean :19.30 Mean :20.13 Mean :20.04 Mean :20.36
3rd Qu.:25.22 3rd Qu.:25.82 3rd Qu.:25.56 3rd Qu.:25.73
Soil.SoilWater.ESW.18. Soil.SoilWater.ESW.19. Soil.SoilWater.ESW.20. Soil.SoilWater.ESW.21.
Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:16.33 1st Qu.:16.38 1st Qu.:17.42 1st Qu.:15.93
Median :23.10 Median :23.72 Median :24.60 Median :23.43
Mean :20.69 Mean :20.92 Mean :21.80 Mean :20.70
3rd Qu.:26.03 3rd Qu.:26.34 3rd Qu.:27.24 3rd Qu.:26.24
Soil.SoilWater.ESW.22. Soil.SoilWater.ESW.23. Lucerne.TapRoot.Live.StructuralWt
Min. : 0.00 Min. : 6.00 Min. : 0.0
1st Qu.:15.24 1st Qu.:17.48 1st Qu.:100.2
Median :23.04 Median :23.77 Median :123.6
Mean :20.29 Mean :22.12 Mean :129.8
3rd Qu.:26.97 3rd Qu.:28.99 3rd Qu.:160.2
Lucerne.TapRoot.Live.StorageWt Water SowingDate FD SD1
Min. : 0.000 Length:90533 Length:90533 Length:90533 Length:90533
1st Qu.: 3.793 Class :character Class :character Class :character Class :character
Median : 6.721 Mode :character Mode :character Mode :character Mode :character
Mean : 8.124
3rd Qu.: 9.945
Cutting SS LL Name
Length:90533 Length:90533 Length:90533 Length:90533
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
[ reached getOption("max.print") -- omitted 2 rows ]
# myDb %>%
# dplyr::select(Name) %>%
# unique()
Prepare merge
Add info for merging
select variables that are for comparing with observed data
simD <- myDb %>%
dplyr::select(Name,Clock.Today,LAI,SWC,Height,shootbiomass,RootWt, StemWt, LeafWt,NodeNumber) %>%
tidyr::gather("Variable","Predicted",LAI:NodeNumber) %>%
mutate(Name = as.factor(Name)) %>%
mutate(Variable = as.factor(Variable)) %>%
mutate(Clock.Today = ymd_hms(Clock.Today))
head(simD)
summary(simD)
Name Clock.Today Variable
Iversen_8FWaterdryCuttingGR22: 15152 Min. :1996-10-31 12:00:00 Height : 90533
Iversen_8FWaterdryCuttingGR23: 15152 1st Qu.:2000-09-14 12:00:00 LAI : 90533
Iversen_8FWaterdryCuttingGR25: 15152 Median :2001-12-17 12:00:00 LeafWt : 90533
Iversen_8FWaterdryCuttingGR32: 15152 Mean :2003-12-06 04:37:33 NodeNumber : 90533
Iversen_8FWaterdryCuttingGR33: 15152 3rd Qu.:2004-04-19 12:00:00 RootWt : 90533
Iversen_8FWaterdryCuttingGR35: 15152 Max. :2018-01-01 12:00:00 shootbiomass: 90533
(Other) :633352 (Other) :181066
Predicted
Min. : 0.00
1st Qu.: 27.23
Median : 529.09
Mean : 2295.22
3rd Qu.: 1263.16
Max. :34335.25
head(ObsH)
mergedf<-merge(obsHN,simD,by=c("Clock.Today","Name","Variable"))
summary(mergedf)
Clock.Today Name Variable
Min. :1997-10-23 Iversen_121DefoliationLLFDFD5 :107 Height :407
1st Qu.:2001-02-19 Iversen_91DefoliationLL :107 Branch : 0
Median :2002-10-21 Iversen_8Waterirr : 68 CrownWt : 0
Mean :2005-09-06 Iversen_9SowingDateSD1Waterirr: 67 Fraction : 0
3rd Qu.:2015-02-03 Iversen_9SowingDateSD2Waterirr: 25 HardStemWt: 0
Max. :2017-12-29 Iversen_9SowingDateSD3Waterirr: 18 LAI : 0
(Other) : 15 (Other) : 0
ExpUnitCode Collection Experiment.x Water.x Defoliation.x
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 1997_2001: 68 Lincoln2000:131 dry: 0 HH: 0
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 2000_2002:125 Lincoln2015:107 irr:407 LL:407
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 2002_2004:107 Lincoln2003: 54
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 2010_2012: 0 Lincoln2001: 35
Iversen_8WaterirrGs_5Rt_1 : 10 2014_2018:107 Lincoln2004: 31
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2002: 22
(Other) :339 (Other) : 27
SowingDate.x FD.x Period GrowthSeason.x Rotation.x StartDate
No :175 FD10: 0 00_01 :128 Min. :1.000 Min. :1.000 Min. :1997-10-07
no :107 FD2 : 0 02_03 : 52 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2001-01-24
SD1 : 67 FD5 :407 03_04 : 48 Median :2.000 Median :3.000 Median :2002-10-06
SD2 : 25 16_17 : 39 Mean :2.101 Mean :3.098 Mean :2005-08-05
SD3 : 18 01_02 : 38 3rd Qu.:3.000 3rd Qu.:5.000 3rd Qu.:2015-01-30
SD4 : 15 15_16 : 35 Max. :5.000 Max. :7.000 Max. :2017-12-04
(Other): 0 (Other): 67
MidDate FinishDate Interval VariableUnits Time Observed
Min. :1997-10-28 Min. :1997-11-19 Min. : 0.00 % : 0 12:00:00:407 Min. : 0.00
1st Qu.:2001-02-13 1st Qu.:2001-03-20 1st Qu.: 14.50 cm :232 1st Qu.: 61.75
Median :2002-10-26 Median :2002-11-16 Median : 28.00 fractio0l: 0 Median :185.00
Mean :2005-09-03 Mean :2005-10-03 Mean : 32.16 Fraction : 0 Mean :218.38
3rd Qu.:2015-02-19 3rd Qu.:2015-03-11 3rd Qu.: 40.50 kg/ha : 0 3rd Qu.:360.00
Max. :2017-12-25 Max. :2018-01-15 Max. :116.00 m2/m2 : 0 Max. :798.00
mm :175
StdDEV ExperimentID TreatmentID ID GrowthSeason1 Rotation1
Min. : 0.000 E1: 68 ILL :175 E3ILL :107 Gs_1:160 Rt_1:112
1st Qu.: 0.000 E2:125 ILLF5 :107 E5ILLF5:107 Gs_2:140 Rt_2: 80
Median : 3.107 E3:107 ILLS1 : 67 E1ILL : 68 Gs_3: 54 Rt_3: 58
Mean :12.001 E4: 0 ILLS2 : 25 E2ILLS1: 67 Gs_4: 12 Rt_4: 50
3rd Qu.:16.955 E5:107 ILLS3 : 18 E2ILLS2: 25 Gs_5: 41 Rt_5: 46
Max. :91.520 ILLS4 : 15 E2ILLS3: 18 Gs_6: 0 Rt_6: 42
NA's :228 (Other): 0 (Other): 15 Rt_7: 19
Clock.Today1 GrowthSeason2 Rotation2 year day rain
Min. :1997-10-23 12:00:00 Y1(00_01): 87 R2 :80 Min. :1997 Min. : 1.0 Min. : 0.0000
1st Qu.:2001-02-19 12:00:00 Y1(02_03): 52 S1 :77 1st Qu.:2001 1st Qu.: 63.0 1st Qu.: 0.0000
Median :2002-10-21 12:00:00 Y2(03_04): 48 R3 :58 Median :2002 Median :139.0 Median : 0.0000
Mean :2005-09-06 20:55:25 Y5(00_01): 41 R4 :50 Mean :2005 Mean :170.8 Mean : 0.8781
3rd Qu.:2015-02-03 12:00:00 Y3(16_17): 39 R5 :46 3rd Qu.:2015 3rd Qu.:292.0 3rd Qu.: 0.0000
Max. :2017-12-29 12:00:00 Y2(01_02): 38 R6 :42 Max. :2017 Max. :365.0 Max. :31.8000
(Other) :102 (Other):54
maxt mint mean radn wind vp
Min. : 7.90 Min. :-4.900 Min. : 2.55 Min. : 1.5 Min. :0.700 Min. : 5.10
1st Qu.:15.25 1st Qu.: 4.350 1st Qu.:10.40 1st Qu.: 9.7 1st Qu.:2.900 1st Qu.:10.00
Median :19.00 Median : 8.700 Median :13.20 Median :16.1 Median :3.900 Median :11.40
Mean :19.16 Mean : 7.842 Mean :13.47 Mean :16.7 Mean :3.991 Mean :11.78
3rd Qu.:22.15 3rd Qu.:11.300 3rd Qu.:16.50 3rd Qu.:22.6 3rd Qu.:4.900 3rd Qu.:13.75
Max. :33.80 Max. :20.600 Max. :26.20 Max. :33.4 Max. :9.300 Max. :22.00
Pp Tb TTbeta Tbb TTbroken TbF TTfick
Min. :10.02 Min. :1 Min. : 0.128 Min. :1 Min. : 1.841 Min. :1 Min. : 2.222
1st Qu.:12.21 1st Qu.:1 1st Qu.: 2.242 1st Qu.:1 1st Qu.: 6.819 1st Qu.:1 1st Qu.: 8.144
Median :14.27 Median :1 Median : 4.104 Median :1 Median : 8.972 Median :1 Median :10.611
Mean :13.92 Mean :1 Mean : 5.802 Mean :1 Mean : 9.526 Mean :1 Mean :10.869
3rd Qu.:15.82 3rd Qu.:1 3rd Qu.: 8.081 3rd Qu.:1 3rd Qu.:12.019 3rd Qu.:1 3rd Qu.:13.566
Max. :16.65 Max. :1 Max. :23.343 Max. :1 Max. :20.258 Max. :1 Max. :20.813
ExpName Experiment.y Water.y Defoliation.y SowingDate.y
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 Lincoln1997: 68 dry: 0 HH: 0 No :175
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 Lincoln2000:110 irr:407 LL:407 no :107
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 Lincoln2001: 15 LS: 0 SD1 : 67
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 Lincoln2002:107 SL: 0 SD2 : 25
Iversen_8WaterirrGs_5Rt_1 : 10 Lincoln2010: 0 SS: 0 SD3 : 18
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2015:107 SD4 : 15
(Other) :339 (Other): 0
FD.y GrowthSeason.y Rotation.y Tt_beta_sum Tt_fick_sum Tt_broken_sum
FD10: 0 Gs_1:160 Rt_1 :112 Min. : 0.2834 Min. : 4.022 Min. : 3.333
FD2 : 0 Gs_2:140 Rt_2 : 80 1st Qu.: 60.6597 1st Qu.: 164.966 1st Qu.: 142.557
FD5 :407 Gs_3: 54 Rt_3 : 58 Median :123.1457 Median : 299.055 Median : 258.135
Gs_4: 12 Rt_4 : 50 Mean :156.6504 Mean : 325.886 Mean : 282.948
Gs_5: 41 Rt_5 : 46 3rd Qu.:217.9675 3rd Qu.: 453.067 3rd Qu.: 392.975
Gs_6: 0 Rt_6 : 42 Max. :722.6708 Max. :1186.654 Max. :1051.876
(Other): 19
Ppm Tmean GrowthRotation Predicted
Min. :10.25 Min. : 7.024 11 : 60 Min. : 0.0
1st Qu.:11.99 1st Qu.:10.974 12 : 38 1st Qu.:102.5
Median :14.48 Median :13.963 21 : 24 Median :221.6
Mean :13.83 Mean :13.215 26 : 24 Mean :264.3
3rd Qu.:15.87 3rd Qu.:15.723 13 : 23 3rd Qu.:398.3
Max. :16.55 Max. :19.327 22 : 23 Max. :858.6
(Other):215
str(mergedf)
'data.frame': 407 obs. of 60 variables:
$ Clock.Today : Date, format: "1997-10-23" "1997-10-28" "1997-11-03" ...
$ Name : Factor w/ 25 levels "Iversen_121DefoliationHHFDFD5",..: 16 16 16 16 16 16 16 16 16 16 ...
$ Variable : Factor w/ 19 levels "Branch","CrownWt",..: 5 5 5 5 5 5 5 5 5 5 ...
$ ExpUnitCode : Factor w/ 199 levels "Iversen_8WaterdryGs_1Rt_1",..: 34 34 34 34 34 35 35 35 36 36 ...
$ Collection : Factor w/ 5 levels "1997_2001","2000_2002",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Experiment.x : Factor w/ 11 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 2 2 ...
$ Water.x : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.x : Factor w/ 2 levels "HH","LL": 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.x : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.x : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ Period : Factor w/ 16 levels "00_01","01_02",..: 14 14 14 14 14 14 14 14 14 14 ...
$ GrowthSeason.x: int 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.x : int 2 2 2 2 2 3 3 3 4 4 ...
$ StartDate : Date, format: "1997-10-07" "1997-10-07" "1997-10-07" ...
$ MidDate : Date, format: "1997-10-28" "1997-10-28" "1997-10-28" ...
$ FinishDate : Date, format: "1997-11-19" "1997-11-19" "1997-11-19" ...
$ Interval : int 16 21 27 34 41 19 28 33 22 30 ...
$ VariableUnits : Factor w/ 7 levels "%","cm","fractio0l",..: 7 7 7 7 7 7 7 7 7 7 ...
$ Time : Factor w/ 1 level "12:00:00": 1 1 1 1 1 1 1 1 1 1 ...
$ Observed : num 62.7 146.7 320.7 436.7 564.3 ...
$ StdDEV : num 0 0 0 0 0 0 0 0 0 0 ...
$ ExperimentID : Factor w/ 5 levels "E1","E2","E3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ TreatmentID : Factor w/ 20 levels "DLL","DLLS1",..: 13 13 13 13 13 13 13 13 13 13 ...
$ ID : Factor w/ 25 levels "E1DLL","E1ILL",..: 2 2 2 2 2 2 2 2 2 2 ...
$ GrowthSeason1 : Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation1 : Factor w/ 7 levels "Rt_1","Rt_2",..: 2 2 2 2 2 3 3 3 4 4 ...
$ Clock.Today1 : POSIXct, format: "1997-10-23 12:00:00" "1997-10-28 12:00:00" "1997-11-03 12:00:00" ...
$ GrowthSeason2 : Factor w/ 18 levels "Y1(96_97)","Y2(97_98)",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation2 : Factor w/ 8 levels "R1","R2","R3",..: 2 2 2 2 2 3 3 3 4 4 ...
$ year : int 1997 1997 1997 1997 1997 1997 1997 1997 1998 1998 ...
$ day : int 296 301 307 314 321 343 352 357 15 23 ...
$ rain : num 0 0.7 0 0 0 0 0 0 0 0 ...
$ maxt : num 15.1 24.3 26 12 18.5 19.4 28 31.9 31.4 25.1 ...
$ mint : num 8.8 6.9 5.8 4.7 9.6 8 17 14.1 14.2 15.6 ...
$ mean : num 12 15.6 15.9 8.4 14.1 13.7 22.5 23 22.8 20.4 ...
$ radn : num 20.2 15.6 26.2 26 22.5 30.7 21.6 19.7 22.1 16 ...
$ wind : num 4.3 2.9 5.6 5.7 5.8 4.2 6.1 4.9 7.8 3.9 ...
$ vp : num 10.8 13.1 11.5 7.9 10.6 12.3 12.7 16.1 14.2 17.4 ...
$ Pp : num 14.6 14.9 15.2 15.5 15.8 ...
$ Tb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbeta : num 2.652 8.148 9.211 0.944 4.723 ...
$ Tbb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbroken : num 7.87 11.44 11.84 5.3 9.66 ...
$ TbF : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTfick : num 9.49 12.74 13.02 6.4 11.33 ...
$ ExpName : Factor w/ 338 levels "Iversen_121DefoliationHHFDFD10Gs_1Rt_2",..: 171 171 171 171 171 172 172 172 173 173 ...
$ Experiment.y : Factor w/ 6 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Water.y : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.y : Factor w/ 5 levels "HH","LL","LS",..: 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.y : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.y : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ GrowthSeason.y: Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.y : Factor w/ 10 levels "Rt_1","Rt_10",..: 3 3 3 3 3 4 4 4 5 5 ...
$ Tt_beta_sum : num 69.7 96.2 141.7 172.5 217.7 ...
$ Tt_fick_sum : num 166 220 295 363 447 ...
$ Tt_broken_sum : num 142 189 256 315 388 ...
$ Ppm : num 14.9 14.9 14.9 14.9 14.9 ...
$ Tmean : num 13.2 13.2 13.2 13.2 13.2 ...
$ GrowthRotation: Factor w/ 36 levels "11","12","13",..: 9 9 9 9 9 10 10 10 11 11 ...
$ Predicted : num 182 249 350 438 549 ...
mergedf
mytheme for observed and predicted graphs
mytheme2<-theme(
panel.spacing=unit(.01, "lines"),
panel.border = element_rect(colour = "black",size=1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black",size = 1),
axis.text.x = element_text(face = "plain", color = "black", size = 14, vjust=0.5, hjust = 1),
axis.text.y = element_text(face = "plain", color = "black", size = 14),
axis.title.x=element_text(face="bold",colour="black",size = 14),
axis.title.y=element_text(face="bold",colour="black",size = 14),
strip.background = element_rect(colour = "black", fill = "white",size=1),
strip.text.x = element_text(size=14, angle=0, face = "plain"),
strip.text.y = element_text(size=14, face="plain"),
legend.title = element_text(colour="black", size=14, face="bold"),
axis.text = element_text(face = "bold", vjust = 0.5, size = 14))
Node number
Time series
obs Vs Pre for each experiment
1997-2001
obsheight1<-ObsH%>%dplyr::filter(Name=="Iversen_8Waterirr")
simD1<-simD%>%
mutate(Clock.Today = ymd_hms(Clock.Today))%>%
dplyr::filter(Variable=="Height")%>%
dplyr::filter(Name=="Iversen_8Waterirr")
str(simD1)
'data.frame': 1894 obs. of 4 variables:
$ Name : Factor w/ 85 levels "AshleyDeneSowingDateSD1",..: 45 45 45 45 45 45 45 45 45 45 ...
$ Clock.Today: POSIXct, format: "1996-10-31 12:00:00" "1997-10-16 12:00:00" "1996-11-01 12:00:00" ...
$ Variable : Factor w/ 8 levels "Height","LAI",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Predicted : num 0 114.3 0 34.3 128.4 ...
simD1%>%
ggplot(aes(x=Clock.Today,y=Predicted))+geom_line(size=1)+theme_bw()+
facet_wrap(~ID,ncol = 2)+
geom_point(data=obsheight1, aes(x=Clock.Today1, y=Observed),colour="green",size=3)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Date")+ylab("Plant height (mm)")+
mytheme2+
annotate("text", x=ymd_hms("1999-10-24 12:00:00"), y=750, size = 5, label ="paste(R_RMSD == 37.6,'%')", parse=T)

#geom_text(aes(x=ymd_hms("1999-10-24 12:00:00"), y=750, label="R_RMSD = 37.6%",size=5))
ggsave("D:/R/Pictures/Height/Iversen_8Waterirrheight1.png", width=8, height=4, dpi=500)
2002-2004
obsheight2<-obsHN%>%
dplyr::filter(Name=="Iversen_91DefoliationLL")%>%
dplyr::filter(Variable=="Height")
simD2<-simD%>%
mutate(Clock.Today = ymd_hms(Clock.Today))%>%
dplyr::filter(Variable=="Height")%>%
dplyr::filter(Name=="Iversen_91DefoliationLL")%>%
dplyr::filter(Clock.Today>"2002-06-01")
str(simD2)
'data.frame': 884 obs. of 4 variables:
$ Name : Factor w/ 85 levels "AshleyDeneSowingDateSD1",..: 46 46 46 46 46 46 46 46 46 46 ...
$ Clock.Today: POSIXct, format: "2004-04-27 12:00:00" "2003-10-21 12:00:00" "2003-10-22 12:00:00" ...
$ Variable : Factor w/ 8 levels "Height","LAI",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Predicted : num 222 143.6 157.7 75.1 96.7 ...
simD2%>%
ggplot(aes(x=Clock.Today,y=Predicted))+geom_line(size=1)+theme_bw()+
facet_wrap(~ID,ncol = 1)+
geom_point(data=obsheight2, aes(x=Clock.Today1, y=Observed),colour="green",size=3)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Date")+ylab("Plant height (mm)")+
mytheme2+
annotate("text", x=ymd_hms("2003-07-24 12:00:00"), y=750, size = 5, label ="paste(R_RMSD == 27.6,'%')", parse=T)

#geom_text(aes(x=ymd_hms("2003-07-24 12:00:00"), y=750, label="R_RMSD = 27.6%",size=5))
ggsave("D:/R/Pictures/Height/Iversen_91DefoliationLLheight1.png", width=8, height=4, dpi=500)
obsheight2<-obsHN%>%
dplyr::filter(Name=="Iversen_121DefoliationLLFDFD5")%>%
dplyr::filter(Variable=="Height")
simD2a<-simD%>%
mutate(Clock.Today = ymd_hms(Clock.Today))%>%
dplyr::filter(Variable=="Height")%>%
dplyr::filter(Name=="Iversen_121DefoliationLLFDFD5")%>%
dplyr::filter(Clock.Today<"2015-01-06")
simD2b<-simD%>%
mutate(Clock.Today = ymd_hms(Clock.Today))%>%
dplyr::filter(Variable=="Height")%>%
dplyr::filter(Name=="Iversen_121DefoliationLLFDFD5")%>%
dplyr::filter(Clock.Today>"2015-01-30")
simD2<-rbind(simD2a,simD2b)
str(simD2)
'data.frame': 1158 obs. of 4 variables:
$ Name : Factor w/ 85 levels "AshleyDeneSowingDateSD1",..: 16 16 16 16 16 16 16 16 16 16 ...
$ Clock.Today: POSIXct, format: "2014-10-22 12:00:00" "2014-10-16 12:00:00" "2014-12-24 12:00:00" ...
$ Variable : Factor w/ 8 levels "Height","LAI",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Predicted : num 0 0 404 102 0 ...
simD2%>%
ggplot(aes(x=Clock.Today,y=Predicted))+geom_line(size=1)+theme_bw()+
facet_wrap(~ID,ncol = 1)+
geom_point(data=obsheight2, aes(x=Clock.Today1, y=Observed),colour="green",size=3)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Date")+ylab("Plant height (mm)")+
mytheme2+
annotate("text", x=ymd_hms("2016-07-24 12:00:00"), y=920, size = 5, label ="paste(R_RMSD == 40,'%')" , parse=T)

#geom_text(aes(x=ymd_hms("2016-07-24 12:00:00"), y=920,label="R_RMSD = 40%",size=5))
ggsave("D:/R/Pictures/Height/Iversen_121DefoliationLLFDFD5height1.png", width=8, height=4, dpi=500)
2000-2002
obsheight3<-obsHN%>%
dplyr::filter(Collection=="2000_2002")%>%
dplyr::filter(Variable=="Height")
simD3A<-simD%>%
mutate(Clock.Today = ymd_hms(Clock.Today))%>%
dplyr::filter(Clock.Today>"2000-10-24 12:00:00")%>%
dplyr::filter(Clock.Today<"2002-07-01 12:00:00")%>%
dplyr::filter(Name==c("Iversen_9SowingDateSD1Waterirr","Iversen_9SowingDateSD2Waterirr","Iversen_9SowingDateSD3Waterirr","Iversen_9SowingDateSD4Waterirr"))%>%
dplyr::filter(Variable=="Height")
DF<-data.frame(Name=c("Iversen_9SowingDateSD1Waterirr","Iversen_9SowingDateSD2Waterirr","Iversen_9SowingDateSD3Waterirr","Iversen_9SowingDateSD4Waterirr"),ID= c("E2ILLS1","E2ILLS2","E2ILLS3","E2ILLS4"))
simD3<-merge(DF,simD3A, by=c("Name"))
p1<-simD3%>%
ggplot(aes(x=Clock.Today,y=Predicted))+geom_line(size=1)+theme_bw()+
geom_point(data=obsheight3, aes(x=Clock.Today1, y=Observed),colour="green",size=3)+
facet_wrap(~ID,ncol = 2)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Date")+ylab("Plant height (mm)")+
mytheme2
dat_text <- data.frame(
label = c("R_RMSE=28.2%","R_RMSE=33.2%","R_RMSE=48.6%", "R_RMSE=34.5%"),
ID= c("E2ILLS1","E2ILLS2","E2ILLS3","E2ILLS4"),
x= ymd_hms("2001-01-24 12:00:00", "2001-01-24 12:00:00","2001-01-24 12:00:00","2001-01-24 12:00:00"),
y=c(750,750,750,750))
p1 +geom_text(data=dat_text, mapping = aes(x=x,y=y, label = label),hjust = -0.1,vjust = -1,size=5)

ggsave("D:/R/Pictures/Height/Iversen_9SowingDateSDWaterheight1.png", width=8, height=8, dpi=500)
Statistic and Graph
mergedf
summary(mergedf)
Clock.Today Name Variable
Min. :1997-10-23 Iversen_121DefoliationLLFDFD5 :107 Height :407
1st Qu.:2001-02-19 Iversen_91DefoliationLL :107 Branch : 0
Median :2002-10-21 Iversen_8Waterirr : 68 CrownWt : 0
Mean :2005-09-06 Iversen_9SowingDateSD1Waterirr: 67 Fraction : 0
3rd Qu.:2015-02-03 Iversen_9SowingDateSD2Waterirr: 25 HardStemWt: 0
Max. :2017-12-29 Iversen_9SowingDateSD3Waterirr: 18 LAI : 0
(Other) : 15 (Other) : 0
ExpUnitCode Collection Experiment.x Water.x
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 1997_2001: 68 Lincoln2000:131 dry: 0
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 2000_2002:125 Lincoln2015:107 irr:407
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 2002_2004:107 Lincoln2003: 54
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 2010_2012: 0 Lincoln2001: 35
Iversen_8WaterirrGs_5Rt_1 : 10 2014_2018:107 Lincoln2004: 31
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2002: 22
(Other) :339 (Other) : 27
Defoliation.x SowingDate.x FD.x Period GrowthSeason.x Rotation.x
HH: 0 No :175 FD10: 0 00_01 :128 Min. :1.000 Min. :1.000
LL:407 no :107 FD2 : 0 02_03 : 52 1st Qu.:1.000 1st Qu.:1.000
SD1 : 67 FD5 :407 03_04 : 48 Median :2.000 Median :3.000
SD2 : 25 16_17 : 39 Mean :2.101 Mean :3.098
SD3 : 18 01_02 : 38 3rd Qu.:3.000 3rd Qu.:5.000
SD4 : 15 15_16 : 35 Max. :5.000 Max. :7.000
(Other): 0 (Other): 67
StartDate MidDate FinishDate Interval VariableUnits
Min. :1997-10-07 Min. :1997-10-28 Min. :1997-11-19 Min. : 0.00 % : 0
1st Qu.:2001-01-24 1st Qu.:2001-02-13 1st Qu.:2001-03-20 1st Qu.: 14.50 cm :232
Median :2002-10-06 Median :2002-10-26 Median :2002-11-16 Median : 28.00 fractio0l: 0
Mean :2005-08-05 Mean :2005-09-03 Mean :2005-10-03 Mean : 32.16 Fraction : 0
3rd Qu.:2015-01-30 3rd Qu.:2015-02-19 3rd Qu.:2015-03-11 3rd Qu.: 40.50 kg/ha : 0
Max. :2017-12-04 Max. :2017-12-25 Max. :2018-01-15 Max. :116.00 m2/m2 : 0
mm :175
Time Observed StdDEV ExperimentID TreatmentID ID
12:00:00:407 Min. : 0.00 Min. : 0.000 E1: 68 ILL :175 E3ILL :107
1st Qu.: 61.75 1st Qu.: 0.000 E2:125 ILLF5 :107 E5ILLF5:107
Median :185.00 Median : 3.107 E3:107 ILLS1 : 67 E1ILL : 68
Mean :218.38 Mean :12.001 E4: 0 ILLS2 : 25 E2ILLS1: 67
3rd Qu.:360.00 3rd Qu.:16.955 E5:107 ILLS3 : 18 E2ILLS2: 25
Max. :798.00 Max. :91.520 ILLS4 : 15 E2ILLS3: 18
NA's :228 (Other): 0 (Other): 15
GrowthSeason1 Rotation1 Clock.Today1 GrowthSeason2 Rotation2 year
Gs_1:160 Rt_1:112 Min. :1997-10-23 12:00:00 Y1(00_01): 87 R2 :80 Min. :1997
Gs_2:140 Rt_2: 80 1st Qu.:2001-02-19 12:00:00 Y1(02_03): 52 S1 :77 1st Qu.:2001
Gs_3: 54 Rt_3: 58 Median :2002-10-21 12:00:00 Y2(03_04): 48 R3 :58 Median :2002
Gs_4: 12 Rt_4: 50 Mean :2005-09-06 20:55:25 Y5(00_01): 41 R4 :50 Mean :2005
Gs_5: 41 Rt_5: 46 3rd Qu.:2015-02-03 12:00:00 Y3(16_17): 39 R5 :46 3rd Qu.:2015
Gs_6: 0 Rt_6: 42 Max. :2017-12-29 12:00:00 Y2(01_02): 38 R6 :42 Max. :2017
Rt_7: 19 (Other) :102 (Other):54
day rain maxt mint mean radn
Min. : 1.0 Min. : 0.0000 Min. : 7.90 Min. :-4.900 Min. : 2.55 Min. : 1.5
1st Qu.: 63.0 1st Qu.: 0.0000 1st Qu.:15.25 1st Qu.: 4.350 1st Qu.:10.40 1st Qu.: 9.7
Median :139.0 Median : 0.0000 Median :19.00 Median : 8.700 Median :13.20 Median :16.1
Mean :170.8 Mean : 0.8781 Mean :19.16 Mean : 7.842 Mean :13.47 Mean :16.7
3rd Qu.:292.0 3rd Qu.: 0.0000 3rd Qu.:22.15 3rd Qu.:11.300 3rd Qu.:16.50 3rd Qu.:22.6
Max. :365.0 Max. :31.8000 Max. :33.80 Max. :20.600 Max. :26.20 Max. :33.4
wind vp Pp Tb TTbeta Tbb
Min. :0.700 Min. : 5.10 Min. :10.02 Min. :1 Min. : 0.128 Min. :1
1st Qu.:2.900 1st Qu.:10.00 1st Qu.:12.21 1st Qu.:1 1st Qu.: 2.242 1st Qu.:1
Median :3.900 Median :11.40 Median :14.27 Median :1 Median : 4.104 Median :1
Mean :3.991 Mean :11.78 Mean :13.92 Mean :1 Mean : 5.802 Mean :1
3rd Qu.:4.900 3rd Qu.:13.75 3rd Qu.:15.82 3rd Qu.:1 3rd Qu.: 8.081 3rd Qu.:1
Max. :9.300 Max. :22.00 Max. :16.65 Max. :1 Max. :23.343 Max. :1
TTbroken TbF TTfick ExpName
Min. : 1.841 Min. :1 Min. : 2.222 Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14
1st Qu.: 6.819 1st Qu.:1 1st Qu.: 8.144 Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12
Median : 8.972 Median :1 Median :10.611 Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11
Mean : 9.526 Mean :1 Mean :10.869 Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11
3rd Qu.:12.019 3rd Qu.:1 3rd Qu.:13.566 Iversen_8WaterirrGs_5Rt_1 : 10
Max. :20.258 Max. :1 Max. :20.813 Iversen_91DefoliationLLGs_2Rt_1 : 10
(Other) :339
Experiment.y Water.y Defoliation.y SowingDate.y FD.y GrowthSeason.y Rotation.y
Lincoln1997: 68 dry: 0 HH: 0 No :175 FD10: 0 Gs_1:160 Rt_1 :112
Lincoln2000:110 irr:407 LL:407 no :107 FD2 : 0 Gs_2:140 Rt_2 : 80
Lincoln2001: 15 LS: 0 SD1 : 67 FD5 :407 Gs_3: 54 Rt_3 : 58
Lincoln2002:107 SL: 0 SD2 : 25 Gs_4: 12 Rt_4 : 50
Lincoln2010: 0 SS: 0 SD3 : 18 Gs_5: 41 Rt_5 : 46
Lincoln2015:107 SD4 : 15 Gs_6: 0 Rt_6 : 42
(Other): 0 (Other): 19
Tt_beta_sum Tt_fick_sum Tt_broken_sum Ppm Tmean
Min. : 0.2834 Min. : 4.022 Min. : 3.333 Min. :10.25 Min. : 7.024
1st Qu.: 60.6597 1st Qu.: 164.966 1st Qu.: 142.557 1st Qu.:11.99 1st Qu.:10.974
Median :123.1457 Median : 299.055 Median : 258.135 Median :14.48 Median :13.963
Mean :156.6504 Mean : 325.886 Mean : 282.948 Mean :13.83 Mean :13.215
3rd Qu.:217.9675 3rd Qu.: 453.067 3rd Qu.: 392.975 3rd Qu.:15.87 3rd Qu.:15.723
Max. :722.6708 Max. :1186.654 Max. :1051.876 Max. :16.55 Max. :19.327
GrowthRotation Predicted
11 : 60 Min. : 0.0
12 : 38 1st Qu.:102.5
21 : 24 Median :221.6
26 : 24 Mean :264.3
13 : 23 3rd Qu.:398.3
22 : 23 Max. :858.6
(Other):215
str(mergedf)
'data.frame': 407 obs. of 60 variables:
$ Clock.Today : Date, format: "1997-10-23" "1997-10-28" "1997-11-03" ...
$ Name : Factor w/ 25 levels "Iversen_121DefoliationHHFDFD5",..: 16 16 16 16 16 16 16 16 16 16 ...
$ Variable : Factor w/ 19 levels "Branch","CrownWt",..: 5 5 5 5 5 5 5 5 5 5 ...
$ ExpUnitCode : Factor w/ 199 levels "Iversen_8WaterdryGs_1Rt_1",..: 34 34 34 34 34 35 35 35 36 36 ...
$ Collection : Factor w/ 5 levels "1997_2001","2000_2002",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Experiment.x : Factor w/ 11 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 2 2 ...
$ Water.x : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.x : Factor w/ 2 levels "HH","LL": 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.x : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.x : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ Period : Factor w/ 16 levels "00_01","01_02",..: 14 14 14 14 14 14 14 14 14 14 ...
$ GrowthSeason.x: int 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.x : int 2 2 2 2 2 3 3 3 4 4 ...
$ StartDate : Date, format: "1997-10-07" "1997-10-07" "1997-10-07" ...
$ MidDate : Date, format: "1997-10-28" "1997-10-28" "1997-10-28" ...
$ FinishDate : Date, format: "1997-11-19" "1997-11-19" "1997-11-19" ...
$ Interval : int 16 21 27 34 41 19 28 33 22 30 ...
$ VariableUnits : Factor w/ 7 levels "%","cm","fractio0l",..: 7 7 7 7 7 7 7 7 7 7 ...
$ Time : Factor w/ 1 level "12:00:00": 1 1 1 1 1 1 1 1 1 1 ...
$ Observed : num 62.7 146.7 320.7 436.7 564.3 ...
$ StdDEV : num 0 0 0 0 0 0 0 0 0 0 ...
$ ExperimentID : Factor w/ 5 levels "E1","E2","E3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ TreatmentID : Factor w/ 20 levels "DLL","DLLS1",..: 13 13 13 13 13 13 13 13 13 13 ...
$ ID : Factor w/ 25 levels "E1DLL","E1ILL",..: 2 2 2 2 2 2 2 2 2 2 ...
$ GrowthSeason1 : Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation1 : Factor w/ 7 levels "Rt_1","Rt_2",..: 2 2 2 2 2 3 3 3 4 4 ...
$ Clock.Today1 : POSIXct, format: "1997-10-23 12:00:00" "1997-10-28 12:00:00" "1997-11-03 12:00:00" ...
$ GrowthSeason2 : Factor w/ 18 levels "Y1(96_97)","Y2(97_98)",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation2 : Factor w/ 8 levels "R1","R2","R3",..: 2 2 2 2 2 3 3 3 4 4 ...
$ year : int 1997 1997 1997 1997 1997 1997 1997 1997 1998 1998 ...
$ day : int 296 301 307 314 321 343 352 357 15 23 ...
$ rain : num 0 0.7 0 0 0 0 0 0 0 0 ...
$ maxt : num 15.1 24.3 26 12 18.5 19.4 28 31.9 31.4 25.1 ...
$ mint : num 8.8 6.9 5.8 4.7 9.6 8 17 14.1 14.2 15.6 ...
$ mean : num 12 15.6 15.9 8.4 14.1 13.7 22.5 23 22.8 20.4 ...
$ radn : num 20.2 15.6 26.2 26 22.5 30.7 21.6 19.7 22.1 16 ...
$ wind : num 4.3 2.9 5.6 5.7 5.8 4.2 6.1 4.9 7.8 3.9 ...
$ vp : num 10.8 13.1 11.5 7.9 10.6 12.3 12.7 16.1 14.2 17.4 ...
$ Pp : num 14.6 14.9 15.2 15.5 15.8 ...
$ Tb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbeta : num 2.652 8.148 9.211 0.944 4.723 ...
$ Tbb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbroken : num 7.87 11.44 11.84 5.3 9.66 ...
$ TbF : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTfick : num 9.49 12.74 13.02 6.4 11.33 ...
$ ExpName : Factor w/ 338 levels "Iversen_121DefoliationHHFDFD10Gs_1Rt_2",..: 171 171 171 171 171 172 172 172 173 173 ...
$ Experiment.y : Factor w/ 6 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Water.y : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.y : Factor w/ 5 levels "HH","LL","LS",..: 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.y : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.y : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ GrowthSeason.y: Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.y : Factor w/ 10 levels "Rt_1","Rt_10",..: 3 3 3 3 3 4 4 4 5 5 ...
$ Tt_beta_sum : num 69.7 96.2 141.7 172.5 217.7 ...
$ Tt_fick_sum : num 166 220 295 363 447 ...
$ Tt_broken_sum : num 142 189 256 315 388 ...
$ Ppm : num 14.9 14.9 14.9 14.9 14.9 ...
$ Tmean : num 13.2 13.2 13.2 13.2 13.2 ...
$ GrowthRotation: Factor w/ 36 levels "11","12","13",..: 9 9 9 9 9 10 10 10 11 11 ...
$ Predicted : num 182 249 350 438 549 ...
mergedf %>%
dplyr::filter(Variable== "Height") %>%
ggplot(aes(x=Observed, y= Predicted,
colour= factor(Name))) +
geom_point(size=2)+theme_bw()+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="darkgrey") +
geom_abline(intercept = 0, slope = 1) +
coord_fixed(ratio = 1)+
ggtitle("Plant height")+
facet_wrap(~ID, ncol = 4)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Observed")+ylab("Predicted")+
mytheme2

ggsave("D:/R/Pictures/Height/predicted.png", width=8, height=6, dpi=500)
2002-2004
mergedf
summary(mergedf)
Clock.Today Name Variable
Min. :1997-10-23 Iversen_121DefoliationLLFDFD5 :107 Height :407
1st Qu.:2001-02-19 Iversen_91DefoliationLL :107 Branch : 0
Median :2002-10-21 Iversen_8Waterirr : 68 CrownWt : 0
Mean :2005-09-06 Iversen_9SowingDateSD1Waterirr: 67 Fraction : 0
3rd Qu.:2015-02-03 Iversen_9SowingDateSD2Waterirr: 25 HardStemWt: 0
Max. :2017-12-29 Iversen_9SowingDateSD3Waterirr: 18 LAI : 0
(Other) : 15 (Other) : 0
ExpUnitCode Collection Experiment.x Water.x Defoliation.x
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 1997_2001: 68 Lincoln2000:131 dry: 0 HH: 0
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 2000_2002:125 Lincoln2015:107 irr:407 LL:407
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 2002_2004:107 Lincoln2003: 54
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 2010_2012: 0 Lincoln2001: 35
Iversen_8WaterirrGs_5Rt_1 : 10 2014_2018:107 Lincoln2004: 31
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2002: 22
(Other) :339 (Other) : 27
SowingDate.x FD.x Period GrowthSeason.x Rotation.x StartDate
No :175 FD10: 0 00_01 :128 Min. :1.000 Min. :1.000 Min. :1997-10-07
no :107 FD2 : 0 02_03 : 52 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2001-01-24
SD1 : 67 FD5 :407 03_04 : 48 Median :2.000 Median :3.000 Median :2002-10-06
SD2 : 25 16_17 : 39 Mean :2.101 Mean :3.098 Mean :2005-08-05
SD3 : 18 01_02 : 38 3rd Qu.:3.000 3rd Qu.:5.000 3rd Qu.:2015-01-30
SD4 : 15 15_16 : 35 Max. :5.000 Max. :7.000 Max. :2017-12-04
(Other): 0 (Other): 67
MidDate FinishDate Interval VariableUnits Time Observed
Min. :1997-10-28 Min. :1997-11-19 Min. : 0.00 % : 0 12:00:00:407 Min. : 0.00
1st Qu.:2001-02-13 1st Qu.:2001-03-20 1st Qu.: 14.50 cm :232 1st Qu.: 61.75
Median :2002-10-26 Median :2002-11-16 Median : 28.00 fractio0l: 0 Median :185.00
Mean :2005-09-03 Mean :2005-10-03 Mean : 32.16 Fraction : 0 Mean :218.38
3rd Qu.:2015-02-19 3rd Qu.:2015-03-11 3rd Qu.: 40.50 kg/ha : 0 3rd Qu.:360.00
Max. :2017-12-25 Max. :2018-01-15 Max. :116.00 m2/m2 : 0 Max. :798.00
mm :175
StdDEV ExperimentID TreatmentID ID GrowthSeason1 Rotation1
Min. : 0.000 E1: 68 ILL :175 E3ILL :107 Gs_1:160 Rt_1:112
1st Qu.: 0.000 E2:125 ILLF5 :107 E5ILLF5:107 Gs_2:140 Rt_2: 80
Median : 3.107 E3:107 ILLS1 : 67 E1ILL : 68 Gs_3: 54 Rt_3: 58
Mean :12.001 E4: 0 ILLS2 : 25 E2ILLS1: 67 Gs_4: 12 Rt_4: 50
3rd Qu.:16.955 E5:107 ILLS3 : 18 E2ILLS2: 25 Gs_5: 41 Rt_5: 46
Max. :91.520 ILLS4 : 15 E2ILLS3: 18 Gs_6: 0 Rt_6: 42
NA's :228 (Other): 0 (Other): 15 Rt_7: 19
Clock.Today1 GrowthSeason2 Rotation2 year day rain
Min. :1997-10-23 12:00:00 Y1(00_01): 87 R2 :80 Min. :1997 Min. : 1.0 Min. : 0.0000
1st Qu.:2001-02-19 12:00:00 Y1(02_03): 52 S1 :77 1st Qu.:2001 1st Qu.: 63.0 1st Qu.: 0.0000
Median :2002-10-21 12:00:00 Y2(03_04): 48 R3 :58 Median :2002 Median :139.0 Median : 0.0000
Mean :2005-09-06 20:55:25 Y5(00_01): 41 R4 :50 Mean :2005 Mean :170.8 Mean : 0.8781
3rd Qu.:2015-02-03 12:00:00 Y3(16_17): 39 R5 :46 3rd Qu.:2015 3rd Qu.:292.0 3rd Qu.: 0.0000
Max. :2017-12-29 12:00:00 Y2(01_02): 38 R6 :42 Max. :2017 Max. :365.0 Max. :31.8000
(Other) :102 (Other):54
maxt mint mean radn wind vp
Min. : 7.90 Min. :-4.900 Min. : 2.55 Min. : 1.5 Min. :0.700 Min. : 5.10
1st Qu.:15.25 1st Qu.: 4.350 1st Qu.:10.40 1st Qu.: 9.7 1st Qu.:2.900 1st Qu.:10.00
Median :19.00 Median : 8.700 Median :13.20 Median :16.1 Median :3.900 Median :11.40
Mean :19.16 Mean : 7.842 Mean :13.47 Mean :16.7 Mean :3.991 Mean :11.78
3rd Qu.:22.15 3rd Qu.:11.300 3rd Qu.:16.50 3rd Qu.:22.6 3rd Qu.:4.900 3rd Qu.:13.75
Max. :33.80 Max. :20.600 Max. :26.20 Max. :33.4 Max. :9.300 Max. :22.00
Pp Tb TTbeta Tbb TTbroken TbF TTfick
Min. :10.02 Min. :1 Min. : 0.128 Min. :1 Min. : 1.841 Min. :1 Min. : 2.222
1st Qu.:12.21 1st Qu.:1 1st Qu.: 2.242 1st Qu.:1 1st Qu.: 6.819 1st Qu.:1 1st Qu.: 8.144
Median :14.27 Median :1 Median : 4.104 Median :1 Median : 8.972 Median :1 Median :10.611
Mean :13.92 Mean :1 Mean : 5.802 Mean :1 Mean : 9.526 Mean :1 Mean :10.869
3rd Qu.:15.82 3rd Qu.:1 3rd Qu.: 8.081 3rd Qu.:1 3rd Qu.:12.019 3rd Qu.:1 3rd Qu.:13.566
Max. :16.65 Max. :1 Max. :23.343 Max. :1 Max. :20.258 Max. :1 Max. :20.813
ExpName Experiment.y Water.y Defoliation.y SowingDate.y
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 Lincoln1997: 68 dry: 0 HH: 0 No :175
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 Lincoln2000:110 irr:407 LL:407 no :107
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 Lincoln2001: 15 LS: 0 SD1 : 67
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 Lincoln2002:107 SL: 0 SD2 : 25
Iversen_8WaterirrGs_5Rt_1 : 10 Lincoln2010: 0 SS: 0 SD3 : 18
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2015:107 SD4 : 15
(Other) :339 (Other): 0
FD.y GrowthSeason.y Rotation.y Tt_beta_sum Tt_fick_sum Tt_broken_sum
FD10: 0 Gs_1:160 Rt_1 :112 Min. : 0.2834 Min. : 4.022 Min. : 3.333
FD2 : 0 Gs_2:140 Rt_2 : 80 1st Qu.: 60.6597 1st Qu.: 164.966 1st Qu.: 142.557
FD5 :407 Gs_3: 54 Rt_3 : 58 Median :123.1457 Median : 299.055 Median : 258.135
Gs_4: 12 Rt_4 : 50 Mean :156.6504 Mean : 325.886 Mean : 282.948
Gs_5: 41 Rt_5 : 46 3rd Qu.:217.9675 3rd Qu.: 453.067 3rd Qu.: 392.975
Gs_6: 0 Rt_6 : 42 Max. :722.6708 Max. :1186.654 Max. :1051.876
(Other): 19
Ppm Tmean GrowthRotation Predicted
Min. :10.25 Min. : 7.024 11 : 60 Min. : 0.0
1st Qu.:11.99 1st Qu.:10.974 12 : 38 1st Qu.:102.5
Median :14.48 Median :13.963 21 : 24 Median :221.6
Mean :13.83 Mean :13.215 26 : 24 Mean :264.3
3rd Qu.:15.87 3rd Qu.:15.723 13 : 23 3rd Qu.:398.3
Max. :16.55 Max. :19.327 22 : 23 Max. :858.6
(Other):215
str(mergedf)
'data.frame': 407 obs. of 60 variables:
$ Clock.Today : Date, format: "1997-10-23" "1997-10-28" "1997-11-03" ...
$ Name : Factor w/ 25 levels "Iversen_121DefoliationHHFDFD5",..: 16 16 16 16 16 16 16 16 16 16 ...
$ Variable : Factor w/ 19 levels "Branch","CrownWt",..: 5 5 5 5 5 5 5 5 5 5 ...
$ ExpUnitCode : Factor w/ 199 levels "Iversen_8WaterdryGs_1Rt_1",..: 34 34 34 34 34 35 35 35 36 36 ...
$ Collection : Factor w/ 5 levels "1997_2001","2000_2002",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Experiment.x : Factor w/ 11 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 2 2 ...
$ Water.x : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.x : Factor w/ 2 levels "HH","LL": 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.x : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.x : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ Period : Factor w/ 16 levels "00_01","01_02",..: 14 14 14 14 14 14 14 14 14 14 ...
$ GrowthSeason.x: int 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.x : int 2 2 2 2 2 3 3 3 4 4 ...
$ StartDate : Date, format: "1997-10-07" "1997-10-07" "1997-10-07" ...
$ MidDate : Date, format: "1997-10-28" "1997-10-28" "1997-10-28" ...
$ FinishDate : Date, format: "1997-11-19" "1997-11-19" "1997-11-19" ...
$ Interval : int 16 21 27 34 41 19 28 33 22 30 ...
$ VariableUnits : Factor w/ 7 levels "%","cm","fractio0l",..: 7 7 7 7 7 7 7 7 7 7 ...
$ Time : Factor w/ 1 level "12:00:00": 1 1 1 1 1 1 1 1 1 1 ...
$ Observed : num 62.7 146.7 320.7 436.7 564.3 ...
$ StdDEV : num 0 0 0 0 0 0 0 0 0 0 ...
$ ExperimentID : Factor w/ 5 levels "E1","E2","E3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ TreatmentID : Factor w/ 20 levels "DLL","DLLS1",..: 13 13 13 13 13 13 13 13 13 13 ...
$ ID : Factor w/ 25 levels "E1DLL","E1ILL",..: 2 2 2 2 2 2 2 2 2 2 ...
$ GrowthSeason1 : Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation1 : Factor w/ 7 levels "Rt_1","Rt_2",..: 2 2 2 2 2 3 3 3 4 4 ...
$ Clock.Today1 : POSIXct, format: "1997-10-23 12:00:00" "1997-10-28 12:00:00" "1997-11-03 12:00:00" ...
$ GrowthSeason2 : Factor w/ 18 levels "Y1(96_97)","Y2(97_98)",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation2 : Factor w/ 8 levels "R1","R2","R3",..: 2 2 2 2 2 3 3 3 4 4 ...
$ year : int 1997 1997 1997 1997 1997 1997 1997 1997 1998 1998 ...
$ day : int 296 301 307 314 321 343 352 357 15 23 ...
$ rain : num 0 0.7 0 0 0 0 0 0 0 0 ...
$ maxt : num 15.1 24.3 26 12 18.5 19.4 28 31.9 31.4 25.1 ...
$ mint : num 8.8 6.9 5.8 4.7 9.6 8 17 14.1 14.2 15.6 ...
$ mean : num 12 15.6 15.9 8.4 14.1 13.7 22.5 23 22.8 20.4 ...
$ radn : num 20.2 15.6 26.2 26 22.5 30.7 21.6 19.7 22.1 16 ...
$ wind : num 4.3 2.9 5.6 5.7 5.8 4.2 6.1 4.9 7.8 3.9 ...
$ vp : num 10.8 13.1 11.5 7.9 10.6 12.3 12.7 16.1 14.2 17.4 ...
$ Pp : num 14.6 14.9 15.2 15.5 15.8 ...
$ Tb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbeta : num 2.652 8.148 9.211 0.944 4.723 ...
$ Tbb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbroken : num 7.87 11.44 11.84 5.3 9.66 ...
$ TbF : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTfick : num 9.49 12.74 13.02 6.4 11.33 ...
$ ExpName : Factor w/ 338 levels "Iversen_121DefoliationHHFDFD10Gs_1Rt_2",..: 171 171 171 171 171 172 172 172 173 173 ...
$ Experiment.y : Factor w/ 6 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Water.y : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.y : Factor w/ 5 levels "HH","LL","LS",..: 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.y : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.y : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ GrowthSeason.y: Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.y : Factor w/ 10 levels "Rt_1","Rt_10",..: 3 3 3 3 3 4 4 4 5 5 ...
$ Tt_beta_sum : num 69.7 96.2 141.7 172.5 217.7 ...
$ Tt_fick_sum : num 166 220 295 363 447 ...
$ Tt_broken_sum : num 142 189 256 315 388 ...
$ Ppm : num 14.9 14.9 14.9 14.9 14.9 ...
$ Tmean : num 13.2 13.2 13.2 13.2 13.2 ...
$ GrowthRotation: Factor w/ 36 levels "11","12","13",..: 9 9 9 9 9 10 10 10 11 11 ...
$ Predicted : num 182 249 350 438 549 ...
mergedf %>%
dplyr::filter(Collection=="2002_2004")%>%
ggplot(aes(x=Observed, y= Predicted,
colour= factor(Name))) +
geom_point(size=3)+theme_bw()+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="darkgrey") +
geom_abline(intercept = 0, slope = 1) +
coord_fixed(ratio = 1)+
ggtitle("Plant height")+
facet_grid(GrowthSeason.x~Rotation.x)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Observed")+ylab("Predicted")+
theme(axis.title.x=element_text(face="bold",colour="black",size = 12))+
theme(axis.title.y=element_text(face="bold",colour="black",size = 12))

2000-2002
mergedf
summary(mergedf)
Clock.Today Name Variable
Min. :1997-10-23 Iversen_121DefoliationLLFDFD5 :107 Height :407
1st Qu.:2001-02-19 Iversen_91DefoliationLL :107 Branch : 0
Median :2002-10-21 Iversen_8Waterirr : 68 CrownWt : 0
Mean :2005-09-06 Iversen_9SowingDateSD1Waterirr: 67 Fraction : 0
3rd Qu.:2015-02-03 Iversen_9SowingDateSD2Waterirr: 25 HardStemWt: 0
Max. :2017-12-29 Iversen_9SowingDateSD3Waterirr: 18 LAI : 0
(Other) : 15 (Other) : 0
ExpUnitCode Collection Experiment.x Water.x Defoliation.x
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 1997_2001: 68 Lincoln2000:131 dry: 0 HH: 0
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 2000_2002:125 Lincoln2015:107 irr:407 LL:407
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 2002_2004:107 Lincoln2003: 54
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 2010_2012: 0 Lincoln2001: 35
Iversen_8WaterirrGs_5Rt_1 : 10 2014_2018:107 Lincoln2004: 31
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2002: 22
(Other) :339 (Other) : 27
SowingDate.x FD.x Period GrowthSeason.x Rotation.x StartDate
No :175 FD10: 0 00_01 :128 Min. :1.000 Min. :1.000 Min. :1997-10-07
no :107 FD2 : 0 02_03 : 52 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2001-01-24
SD1 : 67 FD5 :407 03_04 : 48 Median :2.000 Median :3.000 Median :2002-10-06
SD2 : 25 16_17 : 39 Mean :2.101 Mean :3.098 Mean :2005-08-05
SD3 : 18 01_02 : 38 3rd Qu.:3.000 3rd Qu.:5.000 3rd Qu.:2015-01-30
SD4 : 15 15_16 : 35 Max. :5.000 Max. :7.000 Max. :2017-12-04
(Other): 0 (Other): 67
MidDate FinishDate Interval VariableUnits Time Observed
Min. :1997-10-28 Min. :1997-11-19 Min. : 0.00 % : 0 12:00:00:407 Min. : 0.00
1st Qu.:2001-02-13 1st Qu.:2001-03-20 1st Qu.: 14.50 cm :232 1st Qu.: 61.75
Median :2002-10-26 Median :2002-11-16 Median : 28.00 fractio0l: 0 Median :185.00
Mean :2005-09-03 Mean :2005-10-03 Mean : 32.16 Fraction : 0 Mean :218.38
3rd Qu.:2015-02-19 3rd Qu.:2015-03-11 3rd Qu.: 40.50 kg/ha : 0 3rd Qu.:360.00
Max. :2017-12-25 Max. :2018-01-15 Max. :116.00 m2/m2 : 0 Max. :798.00
mm :175
StdDEV ExperimentID TreatmentID ID GrowthSeason1 Rotation1
Min. : 0.000 E1: 68 ILL :175 E3ILL :107 Gs_1:160 Rt_1:112
1st Qu.: 0.000 E2:125 ILLF5 :107 E5ILLF5:107 Gs_2:140 Rt_2: 80
Median : 3.107 E3:107 ILLS1 : 67 E1ILL : 68 Gs_3: 54 Rt_3: 58
Mean :12.001 E4: 0 ILLS2 : 25 E2ILLS1: 67 Gs_4: 12 Rt_4: 50
3rd Qu.:16.955 E5:107 ILLS3 : 18 E2ILLS2: 25 Gs_5: 41 Rt_5: 46
Max. :91.520 ILLS4 : 15 E2ILLS3: 18 Gs_6: 0 Rt_6: 42
NA's :228 (Other): 0 (Other): 15 Rt_7: 19
Clock.Today1 GrowthSeason2 Rotation2 year day rain
Min. :1997-10-23 12:00:00 Y1(00_01): 87 R2 :80 Min. :1997 Min. : 1.0 Min. : 0.0000
1st Qu.:2001-02-19 12:00:00 Y1(02_03): 52 S1 :77 1st Qu.:2001 1st Qu.: 63.0 1st Qu.: 0.0000
Median :2002-10-21 12:00:00 Y2(03_04): 48 R3 :58 Median :2002 Median :139.0 Median : 0.0000
Mean :2005-09-06 20:55:25 Y5(00_01): 41 R4 :50 Mean :2005 Mean :170.8 Mean : 0.8781
3rd Qu.:2015-02-03 12:00:00 Y3(16_17): 39 R5 :46 3rd Qu.:2015 3rd Qu.:292.0 3rd Qu.: 0.0000
Max. :2017-12-29 12:00:00 Y2(01_02): 38 R6 :42 Max. :2017 Max. :365.0 Max. :31.8000
(Other) :102 (Other):54
maxt mint mean radn wind vp
Min. : 7.90 Min. :-4.900 Min. : 2.55 Min. : 1.5 Min. :0.700 Min. : 5.10
1st Qu.:15.25 1st Qu.: 4.350 1st Qu.:10.40 1st Qu.: 9.7 1st Qu.:2.900 1st Qu.:10.00
Median :19.00 Median : 8.700 Median :13.20 Median :16.1 Median :3.900 Median :11.40
Mean :19.16 Mean : 7.842 Mean :13.47 Mean :16.7 Mean :3.991 Mean :11.78
3rd Qu.:22.15 3rd Qu.:11.300 3rd Qu.:16.50 3rd Qu.:22.6 3rd Qu.:4.900 3rd Qu.:13.75
Max. :33.80 Max. :20.600 Max. :26.20 Max. :33.4 Max. :9.300 Max. :22.00
Pp Tb TTbeta Tbb TTbroken TbF TTfick
Min. :10.02 Min. :1 Min. : 0.128 Min. :1 Min. : 1.841 Min. :1 Min. : 2.222
1st Qu.:12.21 1st Qu.:1 1st Qu.: 2.242 1st Qu.:1 1st Qu.: 6.819 1st Qu.:1 1st Qu.: 8.144
Median :14.27 Median :1 Median : 4.104 Median :1 Median : 8.972 Median :1 Median :10.611
Mean :13.92 Mean :1 Mean : 5.802 Mean :1 Mean : 9.526 Mean :1 Mean :10.869
3rd Qu.:15.82 3rd Qu.:1 3rd Qu.: 8.081 3rd Qu.:1 3rd Qu.:12.019 3rd Qu.:1 3rd Qu.:13.566
Max. :16.65 Max. :1 Max. :23.343 Max. :1 Max. :20.258 Max. :1 Max. :20.813
ExpName Experiment.y Water.y Defoliation.y SowingDate.y
Iversen_9SowingDateSD2WaterirrGs_1Rt_1: 14 Lincoln1997: 68 dry: 0 HH: 0 No :175
Iversen_9SowingDateSD1WaterirrGs_1Rt_1: 12 Lincoln2000:110 irr:407 LL:407 no :107
Iversen_9SowingDateSD3WaterirrGs_1Rt_1: 11 Lincoln2001: 15 LS: 0 SD1 : 67
Iversen_9SowingDateSD4WaterirrGs_1Rt_1: 11 Lincoln2002:107 SL: 0 SD2 : 25
Iversen_8WaterirrGs_5Rt_1 : 10 Lincoln2010: 0 SS: 0 SD3 : 18
Iversen_91DefoliationLLGs_2Rt_1 : 10 Lincoln2015:107 SD4 : 15
(Other) :339 (Other): 0
FD.y GrowthSeason.y Rotation.y Tt_beta_sum Tt_fick_sum Tt_broken_sum
FD10: 0 Gs_1:160 Rt_1 :112 Min. : 0.2834 Min. : 4.022 Min. : 3.333
FD2 : 0 Gs_2:140 Rt_2 : 80 1st Qu.: 60.6597 1st Qu.: 164.966 1st Qu.: 142.557
FD5 :407 Gs_3: 54 Rt_3 : 58 Median :123.1457 Median : 299.055 Median : 258.135
Gs_4: 12 Rt_4 : 50 Mean :156.6504 Mean : 325.886 Mean : 282.948
Gs_5: 41 Rt_5 : 46 3rd Qu.:217.9675 3rd Qu.: 453.067 3rd Qu.: 392.975
Gs_6: 0 Rt_6 : 42 Max. :722.6708 Max. :1186.654 Max. :1051.876
(Other): 19
Ppm Tmean GrowthRotation Predicted
Min. :10.25 Min. : 7.024 11 : 60 Min. : 0.0
1st Qu.:11.99 1st Qu.:10.974 12 : 38 1st Qu.:102.5
Median :14.48 Median :13.963 21 : 24 Median :221.6
Mean :13.83 Mean :13.215 26 : 24 Mean :264.3
3rd Qu.:15.87 3rd Qu.:15.723 13 : 23 3rd Qu.:398.3
Max. :16.55 Max. :19.327 22 : 23 Max. :858.6
(Other):215
str(mergedf)
'data.frame': 407 obs. of 60 variables:
$ Clock.Today : Date, format: "1997-10-23" "1997-10-28" "1997-11-03" ...
$ Name : Factor w/ 25 levels "Iversen_121DefoliationHHFDFD5",..: 16 16 16 16 16 16 16 16 16 16 ...
$ Variable : Factor w/ 19 levels "Branch","CrownWt",..: 5 5 5 5 5 5 5 5 5 5 ...
$ ExpUnitCode : Factor w/ 199 levels "Iversen_8WaterdryGs_1Rt_1",..: 34 34 34 34 34 35 35 35 36 36 ...
$ Collection : Factor w/ 5 levels "1997_2001","2000_2002",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Experiment.x : Factor w/ 11 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 2 2 ...
$ Water.x : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.x : Factor w/ 2 levels "HH","LL": 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.x : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.x : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ Period : Factor w/ 16 levels "00_01","01_02",..: 14 14 14 14 14 14 14 14 14 14 ...
$ GrowthSeason.x: int 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.x : int 2 2 2 2 2 3 3 3 4 4 ...
$ StartDate : Date, format: "1997-10-07" "1997-10-07" "1997-10-07" ...
$ MidDate : Date, format: "1997-10-28" "1997-10-28" "1997-10-28" ...
$ FinishDate : Date, format: "1997-11-19" "1997-11-19" "1997-11-19" ...
$ Interval : int 16 21 27 34 41 19 28 33 22 30 ...
$ VariableUnits : Factor w/ 7 levels "%","cm","fractio0l",..: 7 7 7 7 7 7 7 7 7 7 ...
$ Time : Factor w/ 1 level "12:00:00": 1 1 1 1 1 1 1 1 1 1 ...
$ Observed : num 62.7 146.7 320.7 436.7 564.3 ...
$ StdDEV : num 0 0 0 0 0 0 0 0 0 0 ...
$ ExperimentID : Factor w/ 5 levels "E1","E2","E3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ TreatmentID : Factor w/ 20 levels "DLL","DLLS1",..: 13 13 13 13 13 13 13 13 13 13 ...
$ ID : Factor w/ 25 levels "E1DLL","E1ILL",..: 2 2 2 2 2 2 2 2 2 2 ...
$ GrowthSeason1 : Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation1 : Factor w/ 7 levels "Rt_1","Rt_2",..: 2 2 2 2 2 3 3 3 4 4 ...
$ Clock.Today1 : POSIXct, format: "1997-10-23 12:00:00" "1997-10-28 12:00:00" "1997-11-03 12:00:00" ...
$ GrowthSeason2 : Factor w/ 18 levels "Y1(96_97)","Y2(97_98)",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation2 : Factor w/ 8 levels "R1","R2","R3",..: 2 2 2 2 2 3 3 3 4 4 ...
$ year : int 1997 1997 1997 1997 1997 1997 1997 1997 1998 1998 ...
$ day : int 296 301 307 314 321 343 352 357 15 23 ...
$ rain : num 0 0.7 0 0 0 0 0 0 0 0 ...
$ maxt : num 15.1 24.3 26 12 18.5 19.4 28 31.9 31.4 25.1 ...
$ mint : num 8.8 6.9 5.8 4.7 9.6 8 17 14.1 14.2 15.6 ...
$ mean : num 12 15.6 15.9 8.4 14.1 13.7 22.5 23 22.8 20.4 ...
$ radn : num 20.2 15.6 26.2 26 22.5 30.7 21.6 19.7 22.1 16 ...
$ wind : num 4.3 2.9 5.6 5.7 5.8 4.2 6.1 4.9 7.8 3.9 ...
$ vp : num 10.8 13.1 11.5 7.9 10.6 12.3 12.7 16.1 14.2 17.4 ...
$ Pp : num 14.6 14.9 15.2 15.5 15.8 ...
$ Tb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbeta : num 2.652 8.148 9.211 0.944 4.723 ...
$ Tbb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbroken : num 7.87 11.44 11.84 5.3 9.66 ...
$ TbF : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTfick : num 9.49 12.74 13.02 6.4 11.33 ...
$ ExpName : Factor w/ 338 levels "Iversen_121DefoliationHHFDFD10Gs_1Rt_2",..: 171 171 171 171 171 172 172 172 173 173 ...
$ Experiment.y : Factor w/ 6 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Water.y : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.y : Factor w/ 5 levels "HH","LL","LS",..: 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.y : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.y : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ GrowthSeason.y: Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.y : Factor w/ 10 levels "Rt_1","Rt_10",..: 3 3 3 3 3 4 4 4 5 5 ...
$ Tt_beta_sum : num 69.7 96.2 141.7 172.5 217.7 ...
$ Tt_fick_sum : num 166 220 295 363 447 ...
$ Tt_broken_sum : num 142 189 256 315 388 ...
$ Ppm : num 14.9 14.9 14.9 14.9 14.9 ...
$ Tmean : num 13.2 13.2 13.2 13.2 13.2 ...
$ GrowthRotation: Factor w/ 36 levels "11","12","13",..: 9 9 9 9 9 10 10 10 11 11 ...
$ Predicted : num 182 249 350 438 549 ...
mergedf %>%
dplyr::filter(Collection=="2000_2002")%>%
ggplot(aes(x=Observed, y= Predicted,
colour= factor(Name))) +
geom_point(size=3)+theme_bw()+
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="darkgrey") +
geom_abline(intercept = 0, slope = 1) +
coord_fixed(ratio = 1)+
ggtitle("Height")+
facet_grid(GrowthSeason.x~Rotation.x)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Observed")+ylab("Predicted")+
theme(axis.title.x=element_text(face="bold",colour="black",size = 12))+
theme(axis.title.y=element_text(face="bold",colour="black",size = 12))

mergedf %>%
dplyr::filter(Collection=="1997_2001")%>%
ggplot(aes(x=Observed, y= Predicted,
colour= factor(Name))) +
geom_point(size=3)+theme_bw() +
geom_smooth(method = "lm", se = TRUE, linetype = 1, colour="darkgrey") +
geom_abline(intercept = 0, slope = 1) +
coord_fixed(ratio = 1) +
ggtitle("Plant height") +
facet_grid(GrowthSeason.x~Rotation.x)+
theme(legend.title=element_blank(),legend.position = "blank")+xlab("Observed")+ylab("Predicted")+
theme(axis.title.x=element_text(face="bold",colour="black",size = 12))+
theme(axis.title.y=element_text(face="bold",colour="black",size = 12))

RMSE
str(mergedf)
'data.frame': 407 obs. of 60 variables:
$ Clock.Today : Date, format: "1997-10-23" "1997-10-28" "1997-11-03" ...
$ Name : Factor w/ 25 levels "Iversen_121DefoliationHHFDFD5",..: 16 16 16 16 16 16 16 16 16 16 ...
$ Variable : Factor w/ 19 levels "Branch","CrownWt",..: 5 5 5 5 5 5 5 5 5 5 ...
$ ExpUnitCode : Factor w/ 199 levels "Iversen_8WaterdryGs_1Rt_1",..: 34 34 34 34 34 35 35 35 36 36 ...
$ Collection : Factor w/ 5 levels "1997_2001","2000_2002",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Experiment.x : Factor w/ 11 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 2 2 ...
$ Water.x : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.x : Factor w/ 2 levels "HH","LL": 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.x : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.x : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ Period : Factor w/ 16 levels "00_01","01_02",..: 14 14 14 14 14 14 14 14 14 14 ...
$ GrowthSeason.x: int 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.x : int 2 2 2 2 2 3 3 3 4 4 ...
$ StartDate : Date, format: "1997-10-07" "1997-10-07" "1997-10-07" ...
$ MidDate : Date, format: "1997-10-28" "1997-10-28" "1997-10-28" ...
$ FinishDate : Date, format: "1997-11-19" "1997-11-19" "1997-11-19" ...
$ Interval : int 16 21 27 34 41 19 28 33 22 30 ...
$ VariableUnits : Factor w/ 7 levels "%","cm","fractio0l",..: 7 7 7 7 7 7 7 7 7 7 ...
$ Time : Factor w/ 1 level "12:00:00": 1 1 1 1 1 1 1 1 1 1 ...
$ Observed : num 62.7 146.7 320.7 436.7 564.3 ...
$ StdDEV : num 0 0 0 0 0 0 0 0 0 0 ...
$ ExperimentID : Factor w/ 5 levels "E1","E2","E3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ TreatmentID : Factor w/ 20 levels "DLL","DLLS1",..: 13 13 13 13 13 13 13 13 13 13 ...
$ ID : Factor w/ 25 levels "E1DLL","E1ILL",..: 2 2 2 2 2 2 2 2 2 2 ...
$ GrowthSeason1 : Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation1 : Factor w/ 7 levels "Rt_1","Rt_2",..: 2 2 2 2 2 3 3 3 4 4 ...
$ Clock.Today1 : POSIXct, format: "1997-10-23 12:00:00" "1997-10-28 12:00:00" "1997-11-03 12:00:00" ...
$ GrowthSeason2 : Factor w/ 18 levels "Y1(96_97)","Y2(97_98)",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation2 : Factor w/ 8 levels "R1","R2","R3",..: 2 2 2 2 2 3 3 3 4 4 ...
$ year : int 1997 1997 1997 1997 1997 1997 1997 1997 1998 1998 ...
$ day : int 296 301 307 314 321 343 352 357 15 23 ...
$ rain : num 0 0.7 0 0 0 0 0 0 0 0 ...
$ maxt : num 15.1 24.3 26 12 18.5 19.4 28 31.9 31.4 25.1 ...
$ mint : num 8.8 6.9 5.8 4.7 9.6 8 17 14.1 14.2 15.6 ...
$ mean : num 12 15.6 15.9 8.4 14.1 13.7 22.5 23 22.8 20.4 ...
$ radn : num 20.2 15.6 26.2 26 22.5 30.7 21.6 19.7 22.1 16 ...
$ wind : num 4.3 2.9 5.6 5.7 5.8 4.2 6.1 4.9 7.8 3.9 ...
$ vp : num 10.8 13.1 11.5 7.9 10.6 12.3 12.7 16.1 14.2 17.4 ...
$ Pp : num 14.6 14.9 15.2 15.5 15.8 ...
$ Tb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbeta : num 2.652 8.148 9.211 0.944 4.723 ...
$ Tbb : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTbroken : num 7.87 11.44 11.84 5.3 9.66 ...
$ TbF : int 1 1 1 1 1 1 1 1 1 1 ...
$ TTfick : num 9.49 12.74 13.02 6.4 11.33 ...
$ ExpName : Factor w/ 338 levels "Iversen_121DefoliationHHFDFD10Gs_1Rt_2",..: 171 171 171 171 171 172 172 172 173 173 ...
$ Experiment.y : Factor w/ 6 levels "Lincoln1997",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Water.y : Factor w/ 2 levels "dry","irr": 2 2 2 2 2 2 2 2 2 2 ...
$ Defoliation.y : Factor w/ 5 levels "HH","LL","LS",..: 2 2 2 2 2 2 2 2 2 2 ...
$ SowingDate.y : Factor w/ 12 levels "no","No","SD1",..: 2 2 2 2 2 2 2 2 2 2 ...
$ FD.y : Factor w/ 3 levels "FD10","FD2","FD5": 3 3 3 3 3 3 3 3 3 3 ...
$ GrowthSeason.y: Factor w/ 6 levels "Gs_1","Gs_2",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Rotation.y : Factor w/ 10 levels "Rt_1","Rt_10",..: 3 3 3 3 3 4 4 4 5 5 ...
$ Tt_beta_sum : num 69.7 96.2 141.7 172.5 217.7 ...
$ Tt_fick_sum : num 166 220 295 363 447 ...
$ Tt_broken_sum : num 142 189 256 315 388 ...
$ Ppm : num 14.9 14.9 14.9 14.9 14.9 ...
$ Tmean : num 13.2 13.2 13.2 13.2 13.2 ...
$ GrowthRotation: Factor w/ 36 levels "11","12","13",..: 9 9 9 9 9 10 10 10 11 11 ...
$ Predicted : num 182 249 350 438 549 ...
mergedf %>%
group_by(ID) %>%
summarise(
n = n(),
r2 = gauchStats(Predicted,Observed)[5],
# rmse = round(rmse(Predicted,Observed),0),
r_rmse = round(rmse(Predicted,Observed)/mean(Observed)*100,1),
nse = round(NSE(Predicted,Observed),2),
sb = gauchStats(Predicted,Observed)[1],
nu = gauchStats(Predicted,Observed)[2],
lc = gauchStats(Predicted,Observed)[3]
)
# NAR = format(coef(m)[2], digits = 2)
# %>%
# group_by(Variable,Name) %>%
# summarise_each(funs(mean))
Height ag
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyMjSGVpZ2h0IGFuYWx5c2lzDQoNCmBgYHtyIExvYWQsIHdhcm5pbmc9RkFMU0UsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTh9DQojIGluc3RhbGwucGFja2FnZXMoInpvbyIpDQojaW5zdGFsbC5wYWNrYWdlcygicG9seW5vbSIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShsdWJyaWRhdGUpICAgDQpsaWJyYXJ5KGh5ZHJvR09GKQ0KbGlicmFyeSh4dGFibGUpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoUlNRTGl0ZSkNCmxpYnJhcnkoYWdyaWNvbGFlKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHpvbykNCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkocG9seW5vbSkNCmBgYA0KIyMgbG9kZSBvYnNlcnZlZCBkYXRhDQpgYGB7cn0NCnVwRGlyIDwtICJEOi9SL0NvbWJpbmVkRGF0YS8iDQpvYnNEYXRhIDwtICJEOi9SL0NvbWJpbmVkRGF0YS8iDQoNCm9ic0FsbCA8LSByZWFkLnRhYmxlKHBhc3RlMChvYnNEYXRhLCAiT2JzQWxsLnR4dCIpLA0KICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpDQpvYnNBMTwtIG9ic0FsbCAlPiUNCiAgZHBseXI6OmZpbHRlcihDb2xsZWN0aW9uPT0iMjAwMF8yMDAyIiklPiUNCiAgbXV0YXRlKFN0YXJ0RGF0ZT1kbXkoU3RhcnREYXRlKSxNaWREYXRlPWRteShNaWREYXRlKSxGaW5pc2hEYXRlPWRteShGaW5pc2hEYXRlKSxDbG9jay5Ub2RheT1kbXkoQ2xvY2suVG9kYXkpKSAlPiUNCiAgI211dGF0ZShTb3dpbmdEYXRlPWFzLmZhY3RvcihpZmVsc2UoU293aW5nRGF0ZT09Im5vIiwiU2RfTm8iLHBhc3RlMCgiU2RfIixTb3dpbmdEYXRlKSkpKSAlPiUgIyBhc3N1bWUgdGhpcyBpcyB0eXBvIHRvIGJlIGZpeGVkPw0KICBtdXRhdGUoR3Jvd3RoU2Vhc29uMT1hcy5mYWN0b3IocGFzdGUwKCJHc18iLEdyb3d0aFNlYXNvbikpKSAlPiUgIyBjcmVhdGluZyBtb3JlIGludHVpdGl2ZSBsYWJlbHMgaGVyZQ0KICBtdXRhdGUoUm90YXRpb24xPWFzLmZhY3RvcihwYXN0ZTAoIlJ0XyIsUm90YXRpb24pKSkgJT4lDQogIG11dGF0ZShFeHBVbml0Q29kZT1hcy5mYWN0b3IocGFzdGUwKE5hbWUsR3Jvd3RoU2Vhc29uMSxSb3RhdGlvbjEpKSkgJT4lDQogIG11dGF0ZShDbG9jay5Ub2RheTEgPSBhcy5QT1NJWGN0KHBhc3RlKENsb2NrLlRvZGF5LFRpbWUpLGZvcm1hdD0iJVktJW0tJWQgJUg6JU06JVMiKSklPiUNCiAgbXV0YXRlKEdyb3d0aFNlYXNvbjI9YXMuZmFjdG9yKHBhc3RlMCgiWSIsR3Jvd3RoU2Vhc29uLCIoIixQZXJpb2QsIikiKSkpICU+JQ0KIG11dGF0ZShSb3RhdGlvbjI9YXMuZmFjdG9yKGlmZWxzZShSb3RhdGlvbj09IjEiLHBhc3RlMCgiUyIsUm90YXRpb24pLHBhc3RlMCgiUiIsUm90YXRpb24pKSkpDQoNCm9ic0E0PC0gb2JzQWxsICU+JQ0KICBkcGx5cjo6ZmlsdGVyKENvbGxlY3Rpb249PSIyMDE0XzIwMTgiKSU+JQ0KICBtdXRhdGUoU3RhcnREYXRlPWRteShTdGFydERhdGUpLE1pZERhdGU9ZG15KE1pZERhdGUpLEZpbmlzaERhdGU9ZG15KEZpbmlzaERhdGUpLENsb2NrLlRvZGF5PWRteShDbG9jay5Ub2RheSkpICU+JQ0KICAjbXV0YXRlKFNvd2luZ0RhdGU9YXMuZmFjdG9yKGlmZWxzZShTb3dpbmdEYXRlPT0ibm8iLCJTZF9ObyIscGFzdGUwKCJTZF8iLFNvd2luZ0RhdGUpKSkpICU+JSAjIGFzc3VtZSB0aGlzIGlzIHR5cG8gdG8gYmUgZml4ZWQ/DQogIG11dGF0ZShHcm93dGhTZWFzb24xPWFzLmZhY3RvcihwYXN0ZTAoIkdzXyIsR3Jvd3RoU2Vhc29uKSkpICU+JSAjIGNyZWF0aW5nIG1vcmUgaW50dWl0aXZlIGxhYmVscyBoZXJlDQogIG11dGF0ZShSb3RhdGlvbjE9YXMuZmFjdG9yKHBhc3RlMCgiUnRfIixSb3RhdGlvbikpKSAlPiUNCiAgbXV0YXRlKEV4cFVuaXRDb2RlPWFzLmZhY3RvcihwYXN0ZTAoTmFtZSxHcm93dGhTZWFzb24xLFJvdGF0aW9uMSkpKSAlPiUNCiAgbXV0YXRlKENsb2NrLlRvZGF5MSA9IGFzLlBPU0lYY3QocGFzdGUoQ2xvY2suVG9kYXksVGltZSksZm9ybWF0PSIlWS0lbS0lZCAlSDolTTolUyIpKSU+JQ0KICBtdXRhdGUoR3Jvd3RoU2Vhc29uMj1hcy5mYWN0b3IocGFzdGUwKCJZIixHcm93dGhTZWFzb24sIigiLFBlcmlvZCwiKSIpKSkgJT4lDQogIG11dGF0ZShSb3RhdGlvbjI9YXMuZmFjdG9yKGlmZWxzZShSb3RhdGlvbj09IjEiLHBhc3RlMCgiUyIsUm90YXRpb24pLHBhc3RlMCgiUiIsUm90YXRpb24pKSkpDQogDQoNCiAgb2JzQTI8LSBvYnNBbGwgJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29sbGVjdGlvbj09IjE5OTdfMjAwMSIpJT4lDQogIG11dGF0ZShTdGFydERhdGU9ZG15KFN0YXJ0RGF0ZSksTWlkRGF0ZT1kbXkoTWlkRGF0ZSksRmluaXNoRGF0ZT1kbXkoRmluaXNoRGF0ZSksQ2xvY2suVG9kYXk9ZG15KENsb2NrLlRvZGF5KSkgJT4lDQogICNtdXRhdGUoU293aW5nRGF0ZT1hcy5mYWN0b3IoaWZlbHNlKFNvd2luZ0RhdGU9PSJubyIsIlNkX05vIixwYXN0ZTAoIlNkXyIsU293aW5nRGF0ZSkpKSkgJT4lICMgYXNzdW1lIHRoaXMgaXMgdHlwbyB0byBiZSBmaXhlZD8NCiAgbXV0YXRlKEdyb3d0aFNlYXNvbjE9YXMuZmFjdG9yKHBhc3RlMCgiR3NfIixHcm93dGhTZWFzb24pKSkgJT4lICMgY3JlYXRpbmcgbW9yZSBpbnR1aXRpdmUgbGFiZWxzIGhlcmUNCiAgbXV0YXRlKFJvdGF0aW9uMT1hcy5mYWN0b3IocGFzdGUwKCJSdF8iLFJvdGF0aW9uKSkpICU+JQ0KICBtdXRhdGUoRXhwVW5pdENvZGU9YXMuZmFjdG9yKHBhc3RlMChOYW1lLEdyb3d0aFNlYXNvbjEsUm90YXRpb24xKSkpICU+JQ0KICBtdXRhdGUoQ2xvY2suVG9kYXkxID0gYXMuUE9TSVhjdChwYXN0ZShDbG9jay5Ub2RheSxUaW1lKSxmb3JtYXQ9IiVZLSVtLSVkICVIOiVNOiVTIikpJT4lDQogIG11dGF0ZShHcm93dGhTZWFzb24yPWFzLmZhY3RvcihwYXN0ZTAoIlkiLEdyb3d0aFNlYXNvbiwiKCIsUGVyaW9kLCIpIikpKSAlPiUNCiAgbXV0YXRlKFJvdGF0aW9uMj1hcy5mYWN0b3IocGFzdGUwKCJSIixSb3RhdGlvbikpKQ0KICANCg0KICBvYnNBMzwtIG9ic0FsbCAlPiUNCiAgZHBseXI6OmZpbHRlcihDb2xsZWN0aW9uPT0iMjAwMl8yMDA0IiklPiUNCiAgbXV0YXRlKFN0YXJ0RGF0ZT1kbXkoU3RhcnREYXRlKSxNaWREYXRlPWRteShNaWREYXRlKSxGaW5pc2hEYXRlPWRteShGaW5pc2hEYXRlKSxDbG9jay5Ub2RheT1kbXkoQ2xvY2suVG9kYXkpKSAlPiUNCiAgI211dGF0ZShTb3dpbmdEYXRlPWFzLmZhY3RvcihpZmVsc2UoU293aW5nRGF0ZT09Im5vIiwiU2RfTm8iLHBhc3RlMCgiU2RfIixTb3dpbmdEYXRlKSkpKSAlPiUgIyBhc3N1bWUgdGhpcyBpcyB0eXBvIHRvIGJlIGZpeGVkPw0KICBtdXRhdGUoR3Jvd3RoU2Vhc29uMT1hcy5mYWN0b3IocGFzdGUwKCJHc18iLEdyb3d0aFNlYXNvbikpKSAlPiUgIyBjcmVhdGluZyBtb3JlIGludHVpdGl2ZSBsYWJlbHMgaGVyZQ0KICBtdXRhdGUoUm90YXRpb24xPWFzLmZhY3RvcihwYXN0ZTAoIlJ0XyIsUm90YXRpb24pKSkgJT4lDQogIG11dGF0ZShFeHBVbml0Q29kZT1hcy5mYWN0b3IocGFzdGUwKE5hbWUsR3Jvd3RoU2Vhc29uMSxSb3RhdGlvbjEpKSkgJT4lDQogIG11dGF0ZShDbG9jay5Ub2RheTEgPSBhcy5QT1NJWGN0KHBhc3RlKENsb2NrLlRvZGF5LFRpbWUpLGZvcm1hdD0iJVktJW0tJWQgJUg6JU06JVMiKSklPiUNCiAgbXV0YXRlKEdyb3d0aFNlYXNvbjI9YXMuZmFjdG9yKHBhc3RlMCgiWSIsR3Jvd3RoU2Vhc29uLCIoIixQZXJpb2QsIikiKSkpICU+JQ0KICBtdXRhdGUoUm90YXRpb24yPWFzLmZhY3RvcihwYXN0ZTAoIlIiLFJvdGF0aW9uKSkpDQogIA0Kb2JzQTwtcmJpbmQob2JzQTIsb2JzQTMsb2JzQTEsb2JzQTQpDQpzdW1tYXJ5KG9ic0EpDQogb2JzQQ0KYGBgDQoNCiNMb2FkIFR0IGFuZCBKb2luIE9ic2VydmVkIGRhdGEgdG9nZXRoZXINCmBgYHtyfQ0KdXBEaXIgPC0gIkQ6L1IvIg0Kb2JzRGF0YSA8LSAiRDovUi9UdEFsbC8iDQoNClR0PC0gcmVhZC50YWJsZShwYXN0ZTAob2JzRGF0YSwgImRmLmFsbC50eHQiKSwNCiAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpDQpUdEEgPC0gVHQgJT4lIG11dGF0ZShDbG9jay5Ub2RheT1kbXkoQ2xvY2suVG9kYXkpLCBFeHBVbml0Q29kZT1hcy5mYWN0b3IoRXhwTmFtZSkpDQpUdEENCk9ic0ggPC1tZXJnZShvYnNBLFR0QSxieT1jKCJDbG9jay5Ub2RheSIsIkV4cFVuaXRDb2RlIikpICU+JQ0KICBtdXRhdGUoR3Jvd3RoUm90YXRpb249YXMuZmFjdG9yKHBhc3RlMChHcm93dGhTZWFzb24ueCxSb3RhdGlvbi54KSkpJT4lDQogIGRwbHlyOjpmaWx0ZXIoV2F0ZXIueD09ImlyciIpJT4lDQogIGRwbHlyOjpmaWx0ZXIoRGVmb2xpYXRpb24ueD09IkxMIiklPiUNCiAgZHBseXI6OmZpbHRlcihWYXJpYWJsZT09IkhlaWdodCIpJT4lDQogIGRwbHlyOjpmaWx0ZXIoVGI9PTEpDQogIA0KDQpzdW1tYXJ5KE9ic0gpDQpgYGANCmBgYHtyfQ0KbXl0aGVtZTE8LXRoZW1lKA0KICAgICBwYW5lbC5zcGFjaW5nPXVuaXQoLjAxLCAibGluZXMiKSwNCiAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsc2l6ZT0xKSwgDQogICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siLHNpemUgPSAxKSwNCiAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJwbGFpbiIsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0LGFuZ2xlPTkwLCB2anVzdD0wLjUsIGhqdXN0ID0gMSksDQogICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAicGxhaW4iLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCksDQogICAgIGF4aXMudGl0bGUueD1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsY29sb3VyPSJibGFjayIsc2l6ZSA9IDE0KSwNCiAgICAgYXhpcy50aXRsZS55PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTQpLA0KICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSAid2hpdGUiLHNpemU9MSksDQogICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPTE0LCBhbmdsZT0wLCBmYWNlID0gInBsYWluIiksIA0KICAgICBzdHJpcC50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCwgZmFjZT0icGxhaW4iKSwNCiAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIiksDQogICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCB2anVzdCA9IDAuNSwgc2l6ZSA9IDE0KSkNCg0KbXl0aGVtZTM8LXRoZW1lKA0KICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSwNCiAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemUgPSAxNCxmYWNlPSJwbGFpbiIpLA0KICAgICBwYW5lbC5zcGFjaW5nPXVuaXQoLjAxLCAibGluZXMiKSwNCiAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsc2l6ZT0xKSwgDQogICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siLHNpemUgPSAxKSwNCiAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJwbGFpbiIsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0LCB2anVzdD0wLjUsIGhqdXN0ID0gMSksDQogICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAicGxhaW4iLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCksDQogICAgIGF4aXMudGl0bGUueD1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsY29sb3VyPSJibGFjayIsc2l6ZSA9IDE0KSwNCiAgICAgYXhpcy50aXRsZS55PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTQpLA0KICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSAid2hpdGUiLHNpemU9MSksDQogICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPTE0LCBhbmdsZT0wLCBmYWNlID0gInBsYWluIiksIA0KICAgICBzdHJpcC50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCwgZmFjZT0icGxhaW4iKSwNCiAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHZqdXN0ID0gMC41LCBzaXplID0gMTQpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsIGxlZ2VuZC5ib3ggPSAidmVydGljYWwiKQ0KYGBgDQoNCg0KIyMjI0hlaWdodCBhZ2FpbnN0IE1lYW4gdGVtcGVyYXR1cmUgDQpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD04fQ0Kb2JzaGVpZ2h0PC1PYnNIJT4lDQogIGRwbHlyOjpmaWx0ZXIoTmFtZT09Ikl2ZXJzZW5fOFdhdGVyaXJyIikNCg0Kb2JzaGVpZ2h0JFJvdGF0aW9uMjwtIGZhY3RvcihvYnNoZWlnaHQkUm90YXRpb24yLCBsZXZlbHM9YygiUjEiLCAiUjIiLCAiUjMiLCAiUjQiLCAiUjUiLCJSNiIsICJSNyIpKQ0KDQpvYnNoZWlnaHQlPiUNCiAgZ2dwbG90KGFlcyh4PVR0X2Jyb2tlbl9zdW0sIHk9T2JzZXJ2ZWQpLCBjb2xvdXI9ZmFjdG9yKE5hbWUpKStnZW9tX3BvaW50KHNpemU9MikrdGhlbWVfYncoKSt4bGFiKCJNZWFuIHRlbXBlcmF0dXJlICiwQykiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpKyBmYWNldF9ncmlkKEdyb3d0aFNlYXNvbjJ+Um90YXRpb24yKSsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLGxpbmV0eXBlPTEgLCBjb2xvdXI9ImJsYWNrIikrIA0KICBnZ3RpdGxlKCJFMUlMTChJdmVyc2VuXzhXYXRlcmlycikiKStteXRoZW1lMSsNCiBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGxpbmV0eXBlID0gMSwgY29sb3VyPSJibHVlIikNCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOFdhdGVyaXJySGVpZ2h0LnBuZyIsIHdpZHRoPTgsIGhlaWdodD02LCBkcGk9NTAwKQ0KDQpgYGANCmBgYHtyLGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTh9DQpvYnNoZWlnaHQ8LU9ic0glPiUNCiAgZHBseXI6OmZpbHRlcihOYW1lPT0iSXZlcnNlbl84V2F0ZXJpcnIiKQ0Kb2JzaGVpZ2h0JFJvdGF0aW9uMjwtIGZhY3RvcihvYnNoZWlnaHQkUm90YXRpb24yLCBsZXZlbHM9YygiUjEiLCAiUjIiLCAiUjMiLCAiUjQiLCAiUjUiLCJSNiIsICJSNyIpKQ0Kb2JzaGVpZ2h0JT4lDQogIGdncGxvdChhZXMoeD1UdF9icm9rZW5fc3VtLCB5PU9ic2VydmVkKSwgY29sb3VyPWZhY3RvcihOYW1lKSkrZ2VvbV9wb2ludChzaXplPTIpK3RoZW1lX2J3KCkreGxhYigiVGhlcm1hbCB0aW1lICiwQ2QpIikreWxhYigiUGxhbnQgaGVpZ2h0IChtbSkiKSsgZmFjZXRfZ3JpZChHcm93dGhTZWFzb24yflJvdGF0aW9uMikrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSxsaW5ldHlwZT0xICwgY29sb3VyPSJibGFjayIpKw0KICBnZ3RpdGxlKCJFMUlMTChJdmVyc2VuXzhXYXRlcmlycikiKStteXRoZW1lMSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MDAsIGJ5ID0yMDApLCBsaW1pdHM9YygwLDUwMCkpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDU1MCwgYnkgPTIwMCksIGxpbWl0cz1jKDAsNjAwKSkrDQogZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBsaW5ldHlwZSA9IDEsIGNvbG91cj0iYmx1ZSIpDQojZ2dzYXZlKCJEOi9SL1BpY3R1cmVzL0hlaWdodC9JdmVyc2VuXzhXYXRlcmlyckhlaWdodC5wbmciLCB3aWR0aD04LCBoZWlnaHQ9NiwgZHBpPTUwMCkNCg0KYGBgDQoNCg0KI0l2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMDQpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD04fQ0Kb2JzaGVpZ2h0MTwtT2JzSCU+JQ0KICBkcGx5cjo6ZmlsdGVyKE5hbWU9PSJJdmVyc2VuXzkxRGVmb2xpYXRpb25MTCIpDQpvYnNoZWlnaHQxJFJvdGF0aW9uMjwtIGZhY3RvcihvYnNoZWlnaHQxJFJvdGF0aW9uMiwgbGV2ZWxzPWMoIlIxIiwgIlIyIiwgIlIzIiwgIlI0IiwgIlI1IiwiUjYiLCAiUjciKSkNCg0Kb2JzaGVpZ2h0MSU+JQ0KICBnZ3Bsb3QoYWVzKHg9VHRfYnJva2VuX3N1bSwgeT1PYnNlcnZlZCksIGNvbG91cj1mYWN0b3IoTmFtZSkpK2dlb21fcG9pbnQoc2l6ZT0yKSt0aGVtZV9idygpK3hsYWIoIlRoZXJtYWwgdGltZSAosENkKSIpK3lsYWIoIlBsYW50IGhlaWdodCAobW0pIikrZ2d0aXRsZSgiRTNJTEwoSXZlcnNlbl85MURlZm9saWF0aW9uTEwpIikrDQogZmFjZXRfZ3JpZChHcm93dGhTZWFzb24yflJvdGF0aW9uMikrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSxsaW5ldHlwZT0xICwgY29sb3VyPSJibGFjayIpKw0KICBteXRoZW1lMSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MDAsIGJ5ID0yMDApLCBsaW1pdHM9YygwLDUwMCkpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDU1MCwgYnkgPTIwMCksIGxpbWl0cz1jKDAsNjAwKSkrDQogZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBsaW5ldHlwZSA9IDEsIGNvbG91cj0iYmx1ZSIpDQoNCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMLnBuZyIsIHdpZHRoPTgsIGhlaWdodD02LCBkcGk9NTAwKQ0KYGBgDQojIyNtZWFuIHRlbXBlcmF0dXJlDQpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD04fQ0Kb2JzaGVpZ2h0MTwtT2JzSCU+JQ0KICBkcGx5cjo6ZmlsdGVyKE5hbWU9PSJJdmVyc2VuXzkxRGVmb2xpYXRpb25MTCIpDQpvYnNoZWlnaHQxJT4lDQogIGdncGxvdChhZXMoeD1tZWFuLCB5PU9ic2VydmVkKSwgY29sb3VyPWZhY3RvcihOYW1lKSkrZ2VvbV9wb2ludChzaXplPTIpK3RoZW1lX2J3KCkreGxhYigiVGhlcm1hbCB0aW1lICiwQ2QpIikreWxhYigiUGxhbnQgaGVpZ2h0IChtbSkiKStnZ3RpdGxlKCJJdmVyc2VuXzkxRGVmb2xpYXRpb25MTCIpKw0KIGZhY2V0X2dyaWQoR3Jvd3RoU2Vhc29uMn5Sb3RhdGlvbjIpKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsbGluZXR5cGU9MSAsIGNvbG91cj0iYmxhY2siKSsNCiAgbXl0aGVtZTErDQogICMgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MDAsIGJ5ID0yMDApLCBsaW1pdHM9YygwLDUwMCkpKw0KICAjIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTUwLCBieSA9MjAwKSwgbGltaXRzPWMoMCw2MDApKSsNCiBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGxpbmV0eXBlID0gMSwgY29sb3VyPSJibHVlIikNCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMLnBuZyIsIHdpZHRoPTgsIGhlaWdodD02LCBkcGk9NTAwKQ0KYGBgDQoNCiMjSXZlcnNlbl85U293aW5nRGF0ZVNEMVdhdGVyaXJyDQpgYGB7cixmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQ0KDQpvYnNoZWlnaHQzPC1PYnNIJT4lDQogIGRwbHlyOjpmaWx0ZXIoTmFtZT09Ikl2ZXJzZW5fOVNvd2luZ0RhdGVTRDFXYXRlcmlyciIpJT4lDQogIG11dGF0ZShPYnNlcnZlZD1PYnNlcnZlZCoxMCkNCiBvYnNoZWlnaHQzJFJvdGF0aW9uMjwtIGZhY3RvcihvYnNoZWlnaHQzJFJvdGF0aW9uMiwgbGV2ZWxzPWMoIlMxIiwgIlIyIiwgIlIzIiwgIlI0IiwgIlI1IiwiUjYiLCAiUjciKSkNCm9ic2hlaWdodDMlPiUNCiAgZ2dwbG90KGFlcyh4PVR0X2Jyb2tlbl9zdW0sIHk9T2JzZXJ2ZWQpLCBjb2xvdXI9ZmFjdG9yKE5hbWUpKStnZW9tX3BvaW50KHNpemU9MikrdGhlbWVfYncoKSt4bGFiKCJUaGVybWFsIHRpbWUgKLBDZCkiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpK2dndGl0bGUoIkUySUxMUzEoSXZlcnNlbl85U293aW5nRGF0ZVNEMVdhdGVyaXJyKSIpKw0KIGZhY2V0X2dyaWQoR3Jvd3RoU2Vhc29uMn5Sb3RhdGlvbjIpKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGxpbmV0eXBlID0gMSwgY29sb3VyPSJibGFjayIpKw0KIG15dGhlbWUxKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDgwMCwgYnkgPTMwMCksIGxpbWl0cz1jKDAsNzUwKSkrDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNjAwLCBieSA9MjAwKSwgbGltaXRzPWMoMCw3MDApKSsNCiBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGxpbmV0eXBlID0gMSwgY29sb3VyPSJibHVlIikNCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOVNvd2luZ0RhdGVTRDFXYXRlcmlyci5wbmciLCB3aWR0aD04LCBoZWlnaHQ9NSwgZHBpPTUwMCkNCmBgYA0KIyNJdmVyc2VuXzlTb3dpbmdEYXRlU0QyV2F0ZXJpcnINCmBgYHtyLGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTEwfQ0KDQpvYnNoZWlnaHQxPC1PYnNIJT4lDQogIGRwbHlyOjpmaWx0ZXIoTmFtZT09Ikl2ZXJzZW5fOVNvd2luZ0RhdGVTRDJXYXRlcmlyciIpJT4lDQogIG11dGF0ZShPYnNlcnZlZD1PYnNlcnZlZCoxMCkNCm9ic2hlaWdodDEkUm90YXRpb24yPC0gZmFjdG9yKG9ic2hlaWdodDEkUm90YXRpb24yLCBsZXZlbHM9YygiUzEiLCAiUjIiLCAiUjMiLCAiUjQiLCAiUjUiLCJSNiIsICJSNyIpKQ0KIA0Kb2JzaGVpZ2h0MSU+JQ0KICBnZ3Bsb3QoYWVzKHg9VHRfYnJva2VuX3N1bSwgeT1PYnNlcnZlZCksIGNvbG91cj1mYWN0b3IoTmFtZSkpK2dlb21fcG9pbnQoc2l6ZT0yKSt0aGVtZV9idygpK3hsYWIoIlRoZXJtYWwgdGltZSAosENkKSIpK3lsYWIoIlBsYW50IGhlaWdodCAobW0pIikrZ2d0aXRsZSgiRTJJTExTMihJdmVyc2VuXzlTb3dpbmdEYXRlU0QyV2F0ZXJpcnIpIikrDQogZmFjZXRfZ3JpZChHcm93dGhTZWFzb24yflJvdGF0aW9uMikrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgbGluZXR5cGUgPSAxLCBjb2xvdXI9ImJsdWUiKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA4MDAsIGJ5ID0yMDApLCBsaW1pdHM9YygwLDkwMCkpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDYwMCwgYnkgPTIwMCksIGxpbWl0cz1jKDAsNzAwKSkrDQogIHRoZW1lKA0KICAgICBwYW5lbC5zcGFjaW5nPXVuaXQoLjAxLCAibGluZXMiKSwNCiAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsc2l6ZT0xKSwgDQogICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siLHNpemUgPSAxKSwNCiAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJwbGFpbiIsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0LCB2anVzdD0wLjUsIGhqdXN0ID0gMSksDQogICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAicGxhaW4iLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCksDQogICAgIGF4aXMudGl0bGUueD1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsY29sb3VyPSJibGFjayIsc2l6ZSA9IDE0KSwNCiAgICAgYXhpcy50aXRsZS55PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTQpLA0KICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSAid2hpdGUiLHNpemU9MSksDQogICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplPTE0LCBhbmdsZT0wLCBmYWNlID0gInBsYWluIiksIA0KICAgICBzdHJpcC50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCwgZmFjZT0icGxhaW4iKSwNCiAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG91cj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIiksDQogICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCB2anVzdCA9IDAuNSwgc2l6ZSA9IDE0KSkNCg0KI2dnc2F2ZSgiRDovUi9QaWN0dXJlcy9IZWlnaHQvSXZlcnNlbl85U293aW5nRGF0ZVNEMldhdGVyaXJyLnBuZyIsIHdpZHRoPTgsIGhlaWdodD0zLCBkcGk9NTAwKQ0KYGBgDQoNCiMjSXZlcnNlbl85U293aW5nRGF0ZVNEM1dhdGVyaXJyDQpgYGB7cixmaWcuaGVpZ2h0PTMsIGZpZy53aWR0aD0xMH0NCg0Kb2JzaGVpZ2h0MTwtT2JzSCU+JQ0KICBkcGx5cjo6ZmlsdGVyKE5hbWU9PSJJdmVyc2VuXzlTb3dpbmdEYXRlU0QzV2F0ZXJpcnIiKSU+JQ0KICBtdXRhdGUoT2JzZXJ2ZWQ9T2JzZXJ2ZWQqMTApDQpvYnNoZWlnaHQxJFJvdGF0aW9uMjwtIGZhY3RvcihvYnNoZWlnaHQxJFJvdGF0aW9uMiwgbGV2ZWxzPWMoIlMxIiwgIlIyIiwgIlIzIiwgIlI0IiwgIlI1IiwiUjYiLCAiUjciKSkNCiANCm9ic2hlaWdodDENCm9ic2hlaWdodDElPiUNCiAgZ2dwbG90KGFlcyh4PVR0X2Jyb2tlbl9zdW0sIHk9T2JzZXJ2ZWQpLCBjb2xvdXI9ZmFjdG9yKE5hbWUpKStnZW9tX3BvaW50KHNpemU9MikrdGhlbWVfYncoKSt4bGFiKCJUaGVybWFsIHRpbWUgKLBDZCkiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpK2dndGl0bGUoIkUySUxMUzMoSXZlcnNlbl85U293aW5nRGF0ZVNEM1dhdGVyaXJyKSIpKw0KIGZhY2V0X2dyaWQoR3Jvd3RoU2Vhc29uMn5Sb3RhdGlvbjIpKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGxpbmV0eXBlID0gMSwgY29sb3VyPSJibHVlIikrDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTAwMCwgYnkgPTIwMCksIGxpbWl0cz1jKDAsMTEwMCkpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDYwMCwgYnkgPTIwMCksIGxpbWl0cz1jKDAsNzAwKSkrDQogICNyZW1vdmUgZ3JpZCBsaW5lcyANCiAgdGhlbWUoDQogICAgIHBhbmVsLnNwYWNpbmc9dW5pdCguMDEsICJsaW5lcyIpLA0KICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIixzaXplPTEpLCANCiAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIsc2l6ZSA9IDEpLA0KICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChmYWNlID0gInBsYWluIiwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIHZqdXN0PTAuNSwgaGp1c3QgPSAxKSwNCiAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJwbGFpbiIsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0KSwNCiAgICAgYXhpcy50aXRsZS54PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTQpLA0KICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLGNvbG91cj0iYmxhY2siLHNpemUgPSAxNCksDQogICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9ICJ3aGl0ZSIsc2l6ZT0xKSwNCiAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9MTQsIGFuZ2xlPTAsIGZhY2UgPSAicGxhaW4iKSwgDQogICAgIHN0cmlwLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPTE0LCBmYWNlPSJwbGFpbiIpLA0KICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSwNCiAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHZqdXN0ID0gMC41LCBzaXplID0gMTQpKQ0KDQojZ2dzYXZlKCJEOi9SL1BpY3R1cmVzL0hlaWdodC9JdmVyc2VuXzlTb3dpbmdEYXRlU0QzV2F0ZXJpcnIucG5nIiwgd2lkdGg9OCwgaGVpZ2h0PTMsIGRwaT01MDApDQogDQpgYGANCiMjSXZlcnNlbl85U293aW5nRGF0ZVNENFdhdGVyaXJyDQpgYGB7cixmaWcuaGVpZ2h0PTMsIGZpZy53aWR0aD0xMH0NCg0Kb2JzaGVpZ2h0MTwtT2JzSCU+JQ0KICBkcGx5cjo6ZmlsdGVyKE5hbWU9PSJJdmVyc2VuXzlTb3dpbmdEYXRlU0Q0V2F0ZXJpcnIiKSU+JQ0KICBtdXRhdGUoT2JzZXJ2ZWQ9T2JzZXJ2ZWQqMTApDQpvYnNoZWlnaHQxJFJvdGF0aW9uMjwtIGZhY3RvcihvYnNoZWlnaHQxJFJvdGF0aW9uMiwgbGV2ZWxzPWMoIlMxIiwgIlIyIiwgIlIzIiwgIlI0IiwgIlI1IiwiUjYiLCAiUjciKSkNCiANCm9ic2hlaWdodDENCm9ic2hlaWdodDElPiUNCiAgZ2dwbG90KGFlcyh4PVR0X2Jyb2tlbl9zdW0sIHk9T2JzZXJ2ZWQpLCBjb2xvdXI9ZmFjdG9yKE5hbWUpKStnZW9tX3BvaW50KHNpemU9MikrdGhlbWVfYncoKSt4bGFiKCJUaGVybWFsIHRpbWUosENkKSIpK3lsYWIoIlBsYW50IGhlaWdodCAobW0pIikrZ2d0aXRsZSgiRTJJTExTNChJdmVyc2VuXzlTb3dpbmdEYXRlU0Q0V2F0ZXJpcnIpIikrDQogZmFjZXRfZ3JpZChHcm93dGhTZWFzb24yflJvdGF0aW9uMikrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgbGluZXR5cGUgPSAxLCBjb2xvdXI9ImJsdWUiKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxMDAwLCBieSA9MjAwKSwgbGltaXRzPWMoMCwxMTAwKSkrDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNjAwLCBieSA9MjAwKSwgbGltaXRzPWMoMCw2MDApKSsNCiAgI3JlbW92ZSBncmlkIGxpbmVzIA0KICB0aGVtZSgNCiAgICAgcGFuZWwuc3BhY2luZz11bml0KC4wMSwgImxpbmVzIiksDQogICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siLHNpemU9MSksIA0KICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIixzaXplID0gMSksDQogICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAicGxhaW4iLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCwgdmp1c3Q9MC41LCBoanVzdCA9IDEpLA0KICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gInBsYWluIiwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQpLA0KICAgICBheGlzLnRpdGxlLng9ZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLGNvbG91cj0iYmxhY2siLHNpemUgPSAxNCksDQogICAgIGF4aXMudGl0bGUueT1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsY29sb3VyPSJibGFjayIsc2l6ZSA9IDE0KSwNCiAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siLCBmaWxsID0gIndoaXRlIixzaXplPTEpLA0KICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT0xNCwgYW5nbGU9MCwgZmFjZSA9ICJwbGFpbiIpLCANCiAgICAgc3RyaXAudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemU9MTQsIGZhY2U9InBsYWluIiksDQogICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvdXI9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpLA0KICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgdmp1c3QgPSAwLjUsIHNpemUgPSAxNCkpDQoNCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOVNvd2luZ0RhdGVTRDRXYXRlcmlyci5wbmciLCB3aWR0aD04LCBoZWlnaHQ9MywgZHBpPTUwMCkNCiANCmBgYA0KDQojI0l2ZXJzb24xMkRlZm9saWF0aW9uRkQ1DQpgYGB7cixmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD04fQ0KDQpvYnNoZWlnaHQxPC1PYnNIJT4lDQogIGRwbHlyOjpmaWx0ZXIoTmFtZT09Ikl2ZXJzZW5fMTIxRGVmb2xpYXRpb25MTEZERkQ1IiklPiUNCiAgbXV0YXRlKE9ic2VydmVkPU9ic2VydmVkKjEwKQ0KIG9ic2hlaWdodDEkUm90YXRpb24yPC0gZmFjdG9yKG9ic2hlaWdodDEkUm90YXRpb24yLCBsZXZlbHM9YygiUzEiLCAiUjIiLCAiUjMiLCAiUjQiLCAiUjUiLCJSNiIsICJSNyIpKQ0KDQpvYnNoZWlnaHQxJT4lDQogIGdncGxvdChhZXMoeD1UdF9icm9rZW5fc3VtLCB5PU9ic2VydmVkKSwgY29sb3VyPWZhY3RvcihOYW1lKSkrZ2VvbV9wb2ludChzaXplPTIpK3RoZW1lX2J3KCkreGxhYigiVGhlcm1hbCB0aW1lKLBDZCkiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpK2dndGl0bGUoIkU1SUxMRjUoSXZlcnNlbl8xMjFEZWZvbGlhdGlvbkxMRkRGRDUpIikrDQogZmFjZXRfZ3JpZChHcm93dGhTZWFzb24yflJvdGF0aW9uMikrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgbGluZXR5cGUgPSAxLCBjb2xvdXI9ImJsdWUiKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxMDAwLCBieSA9NjAwKSwgbGltaXRzPWMoMCw5MDApKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MDAsIGJ5ID0yMDApLCBsaW1pdHM9YygwLDUwMCkpKw0KICAgbXl0aGVtZTENCiAjIGdnc2F2ZSgiRDovUi9QaWN0dXJlcy9IZWlnaHQvSXZlcnNlbl8xMjFEZWZvbGlhdGlvbkxMRkRGRDUucG5nIiwgd2lkdGg9OCwgaGVpZ2h0PTYsIGRwaT01MDApDQogDQpgYGANCg0KIyMjIyBjb252ZXJ0IHVuaXQNCiMjI2NhbGN1bGF0ZSBmb3IgaGVpZ2h0Y2hyb24NCg0KYGBge3J9DQojZGV0YWNoKHBhY2thZ2U6cGx5cikNCm9ic0gyPC1PYnNIJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29sbGVjdGlvbiE9IjE5OTdfMjAwMSIpJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29sbGVjdGlvbiE9IjIwMDJfMjAwNCIpJT4lDQogIG11dGF0ZShPYnNlcnZlZD1PYnNlcnZlZCoxMCkNCg0Kb2JzSDM8LU9ic0glPiUNCiAgZHBseXI6OmZpbHRlcihDb2xsZWN0aW9uIT0iMjAwMF8yMDAyIiklPiUNCiAgZHBseXI6OmZpbHRlcihDb2xsZWN0aW9uIT0iMjAxNF8yMDE4IikNCm9ic0gzDQpvYnNITjwtcmJpbmQob2JzSDIsb2JzSDMpDQpvYnNITg0KDQoNCm9ic1Nsb3BlIDwtIG9ic0hOJT4lDQogIGdyb3VwX2J5KE5hbWUsR3Jvd3RoU2Vhc29uLngsUm90YXRpb24ueCxDb2xsZWN0aW9uLFRtZWFuLFBwbSxHcm93dGhSb3RhdGlvbixJRCxFeHBlcmltZW50SUQpICU+JQ0KICBkbyhtb2QgPSBsbShUdF9icm9rZW5fc3Vtfk9ic2VydmVkLGRhdGE9LikpICU+JQ0KICBtdXRhdGUoc2xvcGUgPSBzdW1tYXJ5KG1vZCkkY29lZmZbMl0pICU+JQ0KICBkcGx5cjo6c2VsZWN0KC1tb2QpDQpvYnNTbG9wZQ0KDQpvYnNIYW5hbHlzaXM8LSBvYnNITiU+JQ0KICBncm91cF9ieShOYW1lLEdyb3d0aFNlYXNvbi54LFJvdGF0aW9uLngsQ29sbGVjdGlvbixJRCxFeHBlcmltZW50SUQpICU+JQ0KICBkbyhtb2QgPSBsbShUdF9icm9rZW5fc3Vtfk9ic2VydmVkLGRhdGE9LikpICU+JQ0KICBtdXRhdGUoc2xvcGUgPSBzdW1tYXJ5KG1vZCkkY29lZmZbMl0pICU+JQ0KICBtdXRhdGUoUjIgPSBzdW1tYXJ5KG1vZCkkci5zcXVhcmVkKSU+JQ0KICBtdXRhdGUoUD1hbm92YShtb2QpJCdQcig+RiknWzFdKSU+JSAgDQogIG11dGF0ZShpbnRjcD0gc3VtbWFyeShtb2QpJGNvZWZmWzFdKSU+JQ0KICBkcGx5cjo6c2VsZWN0KC1tb2QpDQpvYnNIYW5hbHlzaXMNCndyaXRlLmNzdihvYnNIYW5hbHlzaXMsIkQ6L1Ivb2JzSGFuYWx5c2lzLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KDQoNCg0KDQoNCmBgYA0KIyNsb2FkIFJvdGF0aW9uIGFuZCBHcm93dGggc2Vhc29uDQoNCmBgYHtyLGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTEwfQ0KbGlicmFyeShwbHlyKQ0KcGh5bGwgPC0gIkQ6XFxSXFwiDQpTdGFydEdyYXppbmcgPC0gcmVhZC50YWJsZShwYXN0ZTAocGh5bGwsICJFeHBlcmltZW50TGlzdC50eHQiKSwgDQogICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVFJVRSkNClN0YXJ0R3JhemluZzE8LVN0YXJ0R3JhemluZyAlPiUNCiAgbXV0YXRlKEdyb3d0aFJvdGF0aW9uPSBhcy5mYWN0b3IocGFzdGUwKEdyb3d0aFNlYXNvbixSb3RhdGlvbikpKQ0KSGNocm9uUHA8LSBtZXJnZShTdGFydEdyYXppbmcxLG9ic1Nsb3BlLGJ5PWMoIk5hbWUiLCJDb2xsZWN0aW9uIiwiR3Jvd3RoUm90YXRpb24iKSkNCg0KSGNocm9uUHAxPC1IY2hyb25QcCU+JQ0KZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl84V2F0ZXJpcnIifEdyb3d0aFJvdGF0aW9uIT0iNTciKSU+JQ0KZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl8xMjFEZWZvbGlhdGlvbkxMRkRGRDUifEdyb3d0aFJvdGF0aW9uIT0iMzYiKSU+JQ0KIGRwbHlyOjpmaWx0ZXIoTmFtZSE9Ikl2ZXJzZW5fMTIxRGVmb2xpYXRpb25MTEZERkQ1InxHcm93dGhSb3RhdGlvbiE9IjE0IiklPiUNCiBkcGx5cjo6ZmlsdGVyKE5hbWUhPSJJdmVyc2VuXzEyMURlZm9saWF0aW9uTExGREZENSJ8R3Jvd3RoUm90YXRpb24hPSIzNyIpJT4lDQogZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl8xMjFEZWZvbGlhdGlvbkxMRkRGRDUifEdyb3d0aFJvdGF0aW9uIT0iMTIiKSU+JQ0KIGRwbHlyOjpmaWx0ZXIoTmFtZSE9Ikl2ZXJzZW5fMTIxRGVmb2xpYXRpb25MTEZERkQ1InxHcm93dGhSb3RhdGlvbiE9IjQxIiklPiUNCiBkcGx5cjo6ZmlsdGVyKE5hbWUhPSJJdmVyc2VuXzhXYXRlcmlyciJ8R3Jvd3RoUm90YXRpb24hPSIyNiIpJT4lDQogZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl84V2F0ZXJpcnIifEdyb3d0aFJvdGF0aW9uIT0iMzIiKSU+JQ0KIGRwbHlyOjpmaWx0ZXIoTmFtZSE9Ikl2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMInxHcm93dGhSb3RhdGlvbiE9IjI3IiklPiUNCiBkcGx5cjo6ZmlsdGVyKE5hbWUhPSJJdmVyc2VuXzkxRGVmb2xpYXRpb25MTCJ8R3Jvd3RoUm90YXRpb24hPSIxNyIpJT4lDQogZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl85MURlZm9saWF0aW9uTEwifEdyb3d0aFJvdGF0aW9uIT0iMTEiKSU+JQ0KICMgICAjIGRwbHlyOjpmaWx0ZXIoTmFtZSE9Ikl2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMInxHcm93dGhSb3RhdGlvbiE9IjE3IiklPiUNCiBkcGx5cjo6ZmlsdGVyKE5hbWUhPSJJdmVyc2VuXzlTb3dpbmdEYXRlU0QxV2F0ZXJpcnIifEdyb3d0aFJvdGF0aW9uIT0iMTQiKSU+JQ0KIGRwbHlyOjpmaWx0ZXIoTmFtZSE9Ikl2ZXJzZW5fOVNvd2luZ0RhdGVTRDFXYXRlcmlyciJ8R3Jvd3RoUm90YXRpb24hPSIyMSIpJT4lDQogIyAgICMgZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl85U293aW5nRGF0ZVNEMVdhdGVyaXJyInxHcm93dGhSb3RhdGlvbiE9IjI2IiklPiUNCiBkcGx5cjo6ZmlsdGVyKE5hbWUhPSJJdmVyc2VuXzlTb3dpbmdEYXRlU0QyV2F0ZXJpcnIifEdyb3d0aFJvdGF0aW9uIT0iMTMiKQ0KICMjZHBseXI6OmZpbHRlcihOYW1lIT0iSXZlcnNlbl85U293aW5nRGF0ZVNENFdhdGVyaXJyInxHcm93dGhSb3RhdGlvbiE9IjEzIiklPiUNCiAjZHBseXI6OmZpbHRlcihTdGFnZSE9IlNlZWRsaW5nIikNCg0KIyBteS5mb3JtdWxhIDwtIHNsb3BlIH4gcG9seShQcG0sIDIsIHJhdyA9IFRSVUUpDQojIG0gPC0gbG0obXkuZm9ybXVsYSwgSGNocm9uUHAxKQ0KIyBteS5lcSA8LSBhcy5jaGFyYWN0ZXIoc2lnbmlmKGFzLnBvbHlub21pYWwoY29lZihtKSksIDIpKQ0KIyANCiMgDQojIGxhYmVsLnRleHQgPC0gcGFzdGUoZ3N1YigiaXRhbGljKHkpPXgiLCAifml0YWxpYyh4KSIsIG15LmVxLCBmaXhlZCA9IFRSVUUpLA0KIyAgICAgICAgICAgICAgIHBhc3RlKCJpdGFsaWMoUileMiIsICANCiMgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoc3VtbWFyeShtKSRyLnNxdWFyZWQsIGRpZ2l0cyA9IDIpLCANCiMgICAgICAgICAgICAgICAgICAgICBzZXAgPSAifmA9YH4iKSwNCiMgICAgICAgICAgICAgICAgICAgICBzZXAgPSAifn5+fiIpDQoNCg0KDQpteS5mb3JtdWxhICA8LSBmdW5jdGlvbihIY2hyb25QcDEpew0KICBteS5mb3JtdWxhIDwtIHNsb3BlIH4gcG9seShQcG0sIDIsIHJhdyA9IFRSVUUpDQogIG0gPC0gbG0obXkuZm9ybXVsYSwgSGNocm9uUHAxKQ0KICBteS5lcSA8LSBhcy5jaGFyYWN0ZXIoc2lnbmlmKGFzLnBvbHlub21pYWwoY29lZihtKSksIDIpKQ0KICBsYWJlbC50ZXh0IDwtIHBhc3RlKCJ5IiwiJz0nIixwYXN0ZShnc3ViKHksICJ+aXRhbGljKHgpIixteS5lcSwgZml4ZWQgPSBUUlVFKSksDQogICAgICAgICAgICAgIHBhc3RlKCJpdGFsaWMoUileMiIsZm9ybWF0KHN1bW1hcnkobSkkci5zcXVhcmVkLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICAgICAgICAgICAgIHNlcCA9ICJ+YD1gfiIpLA0KICAgICAgICAgICAgICAgICAgICBzZXAgPSAifn5+fiIpDQogIGFzLmNoYXJhY3Rlcihhcy5leHByZXNzaW9uKGxhYmVsLnRleHQpKTsgICAgICAgICAgICAgICAgIA0KfQ0KDQpteS5lcXMgPC0gZGRwbHkoSGNocm9uUHAxLC4oU3RhZ2UpLG15LmZvcm11bGEpDQoNCg0KDQoNCmI8LUhjaHJvblBwMSU+JQ0KICBnZ3Bsb3QoYWVzKHg9UHBtLCB5PXNsb3BlLCBjb2xvdXI9ZmFjdG9yKElEKSxsYWJlbD1Hcm93dGhSb3RhdGlvbikpK2dlb21fdGV4dCgpK3RoZW1lX2J3KCkreGxhYigiTWVhbiBwaG90b3BlcmlvZCAoaCkiKSt5bGFiKGJxdW90ZShib2xkKCdIZWlnaHRjaHJvbiAoJyonsENkJ34nbW0nXi0xKicpJykpKSsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBmb3JtdWxhPXkgfiBwb2x5KHgsIDIsIHJhdz1UUlVFKSwgY29sb3VyPSJkYXJrZ3JleSIpKw0KICBmYWNldF93cmFwKH5TdGFnZSxuY29sID0gMikrbXl0aGVtZTMrdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKQ0KDQojYiArIGFubm90YXRlKGdlb20gPSAidGV4dCIsIHggPSAxMS41LCB5ID0gMiwgbGFiZWwgPSBsYWJlbC50ZXh0LCANCiAgICAgICAgICAgICAjZmFtaWx5ID0gInNlcmlmIiwgaGp1c3QgPSAwLCBwYXJzZSA9IFRSVUUsIHNpemUgPSA0KW0NCmIrZ2VvbV90ZXh0KGRhdGEgPSBteS5lcXMsIGFlcyh4ID0gMTMuNywgeSA9IDIuNSwgbGFiZWwgPSBWMSksIA0KICAgICAgICAgIGNvbG9yID0gJ2JsYWNrJywgIHBhcnNlID0gVFJVRSwgc2l6ZT00KQ0KZGV0YWNoKHBhY2thZ2U6cGx5cikNCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0hlaWdodGNob3JuLnBuZyIsIHdpZHRoPTgsIGhlaWdodD00LCBkcGk9NTAwKQ0KYGBgDQojIyMjYmFzZSBwaG90b3BlcmlvZA0KDQpgYGB7cixmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD0xMH0NCmxpYnJhcnkocGx5cikNClBiPC1IY2hyb25QcDElPiUNCiAgIG11dGF0ZShwYj0xL3Nsb3BlKQ0KDQpsbV9lcW4gPC0gZnVuY3Rpb24oUGIpew0KICBtIDwtIGxtKHBiIH4gUHBtLCBQYik7DQogIGVxIDwtIHN1YnN0aXR1dGUoaXRhbGljKHkpID09IFBwbSArIHBiICUuJSBpdGFsaWMoUHBtKSoiLCJ+fml0YWxpYyhSKV4yfiI9In5yMiwgDQogICAgICAgICAgICAgICAgICAgbGlzdChQcG0gPSBmb3JtYXQoY29lZihtKVsxXSwgZGlnaXRzID0gMiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHBiID0gZm9ybWF0KGNvZWYobSlbMl0sIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgcjIgPSBmb3JtYXQoc3VtbWFyeShtKSRyLnNxdWFyZWQsIGRpZ2l0cyA9IDMpKSkNCiAgYXMuY2hhcmFjdGVyKGFzLmV4cHJlc3Npb24oZXEpKTsgICAgICAgICAgICAgICAgIA0KfQ0KDQplcW5zIDwtIGRkcGx5KFBiLC4oU3RhZ2UpLGxtX2VxbikNCg0KUGIlPiUNCiAgZ2dwbG90KGFlcyh4PVBwbSwgeT1wYiwgY29sb3VyPWZhY3RvcihJRCksbGFiZWw9R3Jvd3RoUm90YXRpb24pKStnZW9tX3RleHQoKSt0aGVtZV9idygpK3hsYWIoIk1lYW4gcGhvdG9wZXJpb2QgKGgpIikreWxhYigiMS95IikrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgIGNvbG91cj0iZGFya2dyZXkiKSsNCiAgZmFjZXRfd3JhcCh+U3RhZ2UsbmNvbCA9IDIpK215dGhlbWUzK3RoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoOSwgMTgsIGJ5ID0zKSwgbGltaXRzPWMoOSwxOCkpKw0KICBnZW9tX3RleHQoZGF0YSA9IGVxbnMsIGFlcyh4ID0gMTMuNSwgeSA9IDIuNSwgbGFiZWwgPSBWMSksIA0KICAgICAgICAgIGNvbG9yID0gJ2JsYWNrJywgIHBhcnNlID0gVFJVRSwgc2l6ZT00LjgpDQpkZXRhY2gocGFja2FnZTpwbHlyKQ0KI2dnc2F2ZSgiRDovUi9QaWN0dXJlcy9IZWlnaHQvSGVpZ2h0Y2hvcm55MS5wbmciLCB3aWR0aD04LCBoZWlnaHQ9NCwgZHBpPTUwMCkNCg0KYGBgDQoNCmBgYHtyfQ0KSGNocm9uUHANClg8LUhjaHJvblBwMSRQcG0NClk8LUhjaHJvblBwMSRzbG9wZQ0KWHNxPC1YXjINClhjdWI8LVheMw0KcGxvdChYLFksIHBjaD0xOSkNCm1vZGVsMTwtbG0oWX5YKQ0KbW9kZWwyPC1sbShZflgrWHNxKQ0KbW9kZWwzPC1sbShZflgrWHNxK1hjdWIpDQptb2RfbG0gPC1sbShZflgqKFg8MTQuMikrWCooWD49MTQuMiksZGF0YT1IY2hyb25QcCkNCmFub3ZhKG1vZGVsMSkNCnN1bW1hcnkobW9kZWwxKQ0KYW5vdmEobW9kZWwyKQ0Kc3VtbWFyeShtb2RlbDIpDQphbm92YShtb2RlbDMpDQpzdW1tYXJ5KG1vZGVsMykNCmFibGluZShtb2RlbDEsIGNvbD0icmVkIikNClhWPC1zZXEobWluKFgpLG1heChYKSwwLjAxKQ0KeXY8LXByZWRpY3QobW9kZWwyLGxpc3QoWD1YVixYc3E9WFZeMikpDQpsaW5lcyhYVix5dixjb2w9ImJsdWUiKQ0KICANCiAgDQpgYGANCg0KDQojIyMgRml0IGEgcG9seW5vbWlhbCByZWdyZXNzaW9uIG1vZGVsDQojIGBgYHtyfQ0KIyBIY2hyb25QcDENCiMgWDwtSGNocm9uUHAxJFBtZWFuDQojIFk8LUhjaHJvblBwMSRzbG9wZQ0KIyBYc3E8LVheMg0KIyBYY3ViPC1YXjMNCiMgcGxvdChYLFksIHBjaD0xOSkNCiMgbW9kZWwxPC1sbShZflgpDQojIG1vZGVsMjwtbG0oWX5YK1hzcSkNCiMgbW9kZWwzPC1sbShZflgrWHNxK1hjdWIpDQojIG1vZF9sbSA8LWxtKFl+WCooWDwxNC4yKStYKihYPj0xNC4yKSxkYXRhPUhjaHJvblBwMSkNCiMgYW5vdmEobW9kZWwxKQ0KIyBzdW1tYXJ5KG1vZGVsMSkNCiMgYW5vdmEobW9kZWwyKQ0KIyBzdW1tYXJ5KG1vZGVsMikNCiMgYW5vdmEobW9kZWwzKQ0KIyBzdW1tYXJ5KG1vZGVsMykNCiMgYWJsaW5lKG1vZGVsMSwgY29sPSJyZWQiKQ0KIyBYVjwtc2VxKG1pbihIY2hyb25QcDEkUG1lYW4pLG1heChIY2hyb25QcDEkUG1lYW4pLDAuMDEpDQojIHl2PC1wcmVkaWN0KG1vZGVsMixsaXN0KFg9WFYsWHNxPVhWXjIpKQ0KIyBsaW5lcyhYVix5dixjb2w9ImJsdWUiKQ0KIyB0aXRsZSh4bGFiPSJNZWFuIHBob3RvcGVyaW9kIChoKSAiLHlsYWI9IkhlaWdodGNocm9uIChtbS9jZCApIikNCg0KDQoNCg0KIyMgRGVmaW5lIHN0YXRzIGZ1bmN0aW9uDQoNCiogVXNpbmcgR2F1Y2ggZXQgYWwuIDIwMDMgKE1vZGVsIGV2YWx1YXRpb24gYnkgY29tcGFyaXNvbiBvZiBtb2RlbC1iYXNlZCBwcmVkaWN0aW9ucyBhbmQgbWVhc3VyZWQgdmFsdWVzLiBBZ3Jvbi4gSi4gOTUsIDE0NDItMTQ0NikgDQpgYGB7ciBTdGF0cywgaW5jbHVkZSA9IFRSVUUsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTh9DQoNCiMgIyBSMg0KIyB0ZXN0REYgPC0gZGF0YS5mcmFtZShhPWMoMSwyLDMsNCw1KSwgYj1jKDEwLDIwLDEwLDQwLDUwKSkNCiMgDQojIG15UjIgPC0gZnVuY3Rpb24ocCxvKSB7DQojICByZXR1cm4oc3VtbWFyeShsbShwfm8sIG5hLmFjdGlvbj1uYS5leGNsdWRlKSkkci5zcXVhcmVkKSANCiMgfQ0KIyANCiMgdGVzdERGICU+JQ0KIyAgIHN1bW1hcmlzZSh0aGlzUjIgPSBteVIyKGEsYikpDQoNCiMgZ2F1Y2ggTVNFIGNvbXBvbmVudHMNCmdhdWNoU3RhdHMgPC0gZnVuY3Rpb24oc2ltLCBtZWFzKSB7DQoNCiAgbl9zIDwtIGxlbmd0aChzaW0pDQogIG5fbSA8LSBsZW5ndGgobWVhcykNCiAgbW9kZWwgPC0gbG0obWVhc35zaW0pDQogIHNpbV9zcSA8LSBzdW0oKHNpbSAtIG1lYW4oc2ltKSleMikNCiAgbWVzX3NxIDwtIHN1bSgobWVhcyAtIG1lYW4obWVhcykpXjIpDQogIHIyIDwtIHN1bW1hcnkobW9kZWwpJHIuc3F1YXJlZA0KICBzbG9wZSA8LSBtb2RlbCRjb2VmZmljaWVudHNbWzJdXQ0KDQogIHNiIDwtIChzdW0obWVhbihtZWFzKSkgLSBzdW0obWVhbihzaW0pKSleMg0KICBudSA8LSAoMS1zbG9wZSleMiAqIChzaW1fc3Evbl9zKQ0KICBsYyA8LSAoMS1yMikgKiAobWVzX3NxL25fbSkNCiAgbXNkIDwtIHNiK251K2xjDQoNCiAgc2JfciA8LSByb3VuZCgoc2IvbXNkKSoxMDAsMSkNCiAgbnVfciA8LSByb3VuZCgobnUvbXNkKSoxMDAsMSkNCiAgbGNfciA8LSByb3VuZCgobGMvbXNkKSoxMDAsMSkNCg0KICBtc2RfciA8LSBzYl9yK251X3IrbGNfcg0KDQogICMgc2VsZWN0IHdoaWNoIHZhcmlhYmxlcyB0byBvdXRwdXQNCiAgb3V0IDwtIGMoc2JfcixudV9yLGxjX3IsIG1zZF9yLCByb3VuZChyMioxMDAsMSkpDQoNCiAgcmV0dXJuKG91dCkNCg0KfQ0KYGBgDQoNCiMjIFRlc3Qgc3RhdHMgZnVuY3Rpb25zIHVzZWQNCg0KYGBge3J9DQpzIDwtIGMoNDIzMS45NzIsMzkzNS42MDQsMzc3OS42NTIsMzYyNy42ODcsMzM2My40OTksMzIzMC41NjYsMjg2OC4xMTQsMjg2OC44MjcpDQptIDwtIGMoNDk4Ny42Niw1NjM2LjA5LDQ3NTQuMDYsNDExNC41Myw0MTQxLjcyLDM3MDQuMDYsNTE0Mi4xOSw0NzYyLjAzKQ0KDQp4IDwtIGdhdWNoU3RhdHMocyxtKQ0KDQp0ZW1wRGYgPC0gZGF0YS5mcmFtZShzdGF0TmFtZT1jKCJTQiIsIk5VIiwiTEMiLCJyX01TRCIsIlIyIiksIHN0YXRWYWx1ZT14KQ0KIGthYmxlKHRlbXBEZiwgZGlnaXRzPSA0KQ0KdGVtcERmMiA8LSBkYXRhLmZyYW1lKFByZWRpY3RlZD1zLCBPYnNlcnZlZD1tKQ0KDQp4IDwtIHRlbXBEZjIgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBuID0gbigpLA0KICAgIHIyID0gZ2F1Y2hTdGF0cyhQcmVkaWN0ZWQsT2JzZXJ2ZWQpWzVdLA0KICAjICBybXNlID0gcm91bmQocm1zZShQcmVkaWN0ZWQsT2JzZXJ2ZWQpLDApLA0KICAgIHJfcm1zZSA9IHJvdW5kKHJtc2UoUHJlZGljdGVkLE9ic2VydmVkKS9tZWFuKE9ic2VydmVkKSoxMDAsMSksDQogICAgbnNlID1mb3JtYXQoTlNFKFByZWRpY3RlZCxPYnNlcnZlZCksIGRpZ2l0cz0zKSwNCiAgICBzYiA9IGdhdWNoU3RhdHMoUHJlZGljdGVkLE9ic2VydmVkKVsxXSwNCiAgbnUgPSBnYXVjaFN0YXRzKFByZWRpY3RlZCxPYnNlcnZlZClbMl0sDQogIGxjID0gZ2F1Y2hTdGF0cyhQcmVkaWN0ZWQsT2JzZXJ2ZWQpWzNdDQogICkgJT4lIA0KICB0KCkgDQoNCmRmIDwtIGRhdGEuZnJhbWUoc3RhdCA9IHJvdy5uYW1lcyh4KSxzdGF0dmFsdWUgPSB4WywxXSkNCg0KZGYgJT4lDQogIGthYmxlKGZvcm1hdCA9ICJtYXJrZG93biIsZGlnaXRzID0gNCkNCiNmb3JtYXQoY29lZihtKVsyXSwgZGlnaXRzID0gMikNCmBgYA0KIyMgTG9hZCBzaW11bGF0ZWQgZGF0YWJhc2UNCiMjIGNyZWF0ZSBmdW5jdGlvbiB0byByZWFkIGRhdGEgKEp1c3RpbidzIHNjcmlwdCkNCmBgYHtyIExvYWRTaW0sIGluY2x1ZGUgPSBGQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9OH0NCkdldEFwc2ltTkdUYWJsZSA8LSBmdW5jdGlvbihkYkxvYywgdGFibGUpIA0Kew0KICBjb25uZWN0aW9uIDwtIGRiQ29ubmVjdChTUUxpdGUoKSwgZGJuYW1lID0gZGJMb2MsIGZsYWdzID0gU1FMSVRFX1JXKQ0KICB0YWJsZSA8LSBkYlJlYWRUYWJsZShjb25uZWN0aW9uLCB0YWJsZSwgcm93Lm5hbWVzPU5VTEwpDQogIGRiRGlzY29ubmVjdChjb25uZWN0aW9uKQ0KICByZXR1cm4odGFibGUpDQp9DQoNCmBgYA0KIyBsb2FkIGFkZHJlc3Mgb2YgZGINCiMgc2V0IHRhYmxlIHRvIGJlIGVucXVpZXJkDQojIGxvYWQgdGFibGUgaW50byBhbiBvYmplY3QNCiMgbWFrZSBpdCBhIGRhdGFmcmFtZQ0KIyBjaGFuZ2UgZGF0ZSB0byBjb3JlcmN0IGZvcm1hdCANCiMgZXhwbG9yZSB0aGUgZGYNCmBgYHtyfQ0KZGIuYWRkcmVzcyA8LSAiRDpcXEFQU0lNWDJcXFByb3RvdHlwZXNcXEx1Y2VybmVcXEx1Y2VybmVWYWxpZGF0aW9uLmRiIg0KdGFibGVOYW1lPC0iUmVwb3J0Ig0KRGJUYWJsZSA8LSBHZXRBcHNpbU5HVGFibGUoZGIuYWRkcmVzcyx0YWJsZU5hbWUpDQpkZiA8LSBhcy5kYXRhLmZyYW1lKERiVGFibGUpDQpkZiRDbG9jay5Ub2RheSA8LSB5bWRfaG1zKGRmJENsb2NrLlRvZGF5KQ0Kc3RyKGRmKQ0Kc3VtbWFyeShkZikNCmhlYWQoZGYpICMgc2ltdWxhdGlvbiByZXN1bHRzDQpgYGANCiMgZ2V0IHNpbSBuYW1lcyAoZGlmZmVyZW50IHRhYmxlKQ0KIyBtZXJnZSBuYW1lcyANCiMgcmVtb3ZlIHVuZWNlc3NhcnkgdmFyaWFibGVzDQpgYGB7cn0NCnNpbU5hbWVEZiA8LSBhcy5kYXRhLmZyYW1lIChHZXRBcHNpbU5HVGFibGUoZGIuYWRkcmVzcywiX1NpbXVsYXRpb25zIikpDQpteURiIDwtIG1lcmdlKGRmLCBzaW1OYW1lRGYsIGJ5Lng9IGMoIlNpbXVsYXRpb25JRCIpLCBieS55PSBjKCJJRCIpKQ0KDQoNCiNzdHIobXlEYikNCmhlYWQobXlEYikNCnN1bW1hcnkobXlEYikNCg0KIyBteURiICU+JQ0KIyAgIGRwbHlyOjpzZWxlY3QoTmFtZSkgJT4lDQojICAgdW5pcXVlKCkNCg0KYGBgDQojIyBQcmVwYXJlIG1lcmdlDQojIyBBZGQgaW5mbyBmb3IgbWVyZ2luZw0KIyMgc2VsZWN0IHZhcmlhYmxlcyB0aGF0IGFyZSBmb3IgY29tcGFyaW5nIHdpdGggb2JzZXJ2ZWQgZGF0YQ0KDQpgYGB7cn0NCnNpbUQgPC0gbXlEYiAlPiUNCiAgZHBseXI6OnNlbGVjdChOYW1lLENsb2NrLlRvZGF5LExBSSxTV0MsSGVpZ2h0LHNob290YmlvbWFzcyxSb290V3QsIFN0ZW1XdCwgTGVhZld0LE5vZGVOdW1iZXIpICU+JQ0KICB0aWR5cjo6Z2F0aGVyKCJWYXJpYWJsZSIsIlByZWRpY3RlZCIsTEFJOk5vZGVOdW1iZXIpICU+JQ0KICBtdXRhdGUoTmFtZSA9IGFzLmZhY3RvcihOYW1lKSkgJT4lDQogIG11dGF0ZShWYXJpYWJsZSA9IGFzLmZhY3RvcihWYXJpYWJsZSkpICU+JQ0KICBtdXRhdGUoQ2xvY2suVG9kYXkgPSB5bWRfaG1zKENsb2NrLlRvZGF5KSkNCg0KaGVhZChzaW1EKQ0Kc3VtbWFyeShzaW1EKQ0KDQpoZWFkKE9ic0gpDQptZXJnZWRmPC1tZXJnZShvYnNITixzaW1ELGJ5PWMoIkNsb2NrLlRvZGF5IiwiTmFtZSIsIlZhcmlhYmxlIikpDQpzdW1tYXJ5KG1lcmdlZGYpDQpzdHIobWVyZ2VkZikNCm1lcmdlZGYNCg0KYGBgDQojIyNteXRoZW1lIGZvciBvYnNlcnZlZCBhbmQgcHJlZGljdGVkIGdyYXBocw0KYGBge3J9DQpteXRoZW1lMjwtdGhlbWUoDQogICAgIHBhbmVsLnNwYWNpbmc9dW5pdCguMDEsICJsaW5lcyIpLA0KICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIixzaXplPTEpLCANCiAgICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIsc2l6ZSA9IDEpLA0KICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChmYWNlID0gInBsYWluIiwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTQsIHZqdXN0PTAuNSwgaGp1c3QgPSAxKSwNCiAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJwbGFpbiIsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0KSwNCiAgICAgYXhpcy50aXRsZS54PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTQpLA0KICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLGNvbG91cj0iYmxhY2siLHNpemUgPSAxNCksDQogICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9ICJ3aGl0ZSIsc2l6ZT0xKSwNCiAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemU9MTQsIGFuZ2xlPTAsIGZhY2UgPSAicGxhaW4iKSwgDQogICAgIHN0cmlwLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplPTE0LCBmYWNlPSJwbGFpbiIpLA0KICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSwNCiAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHZqdXN0ID0gMC41LCBzaXplID0gMTQpKQ0KYGBgDQoNCg0KIyMgTm9kZSBudW1iZXINCiNUaW1lIHNlcmllcw0KIyMgb2JzIFZzIFByZSBmb3IgZWFjaCBleHBlcmltZW50DQojIyAxOTk3LTIwMDENCmBgYHtyLGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTl9DQpvYnNoZWlnaHQxPC1PYnNIJT4lZHBseXI6OmZpbHRlcihOYW1lPT0iSXZlcnNlbl84V2F0ZXJpcnIiKQ0KICANCiBzaW1EMTwtc2ltRCU+JQ0KICAgbXV0YXRlKENsb2NrLlRvZGF5ID0geW1kX2htcyhDbG9jay5Ub2RheSkpJT4lDQogICBkcGx5cjo6ZmlsdGVyKFZhcmlhYmxlPT0iSGVpZ2h0IiklPiUNCiAgIGRwbHlyOjpmaWx0ZXIoTmFtZT09Ikl2ZXJzZW5fOFdhdGVyaXJyIikNCiBzdHIoc2ltRDEpDQogc2ltRDElPiUNCiBnZ3Bsb3QoYWVzKHg9Q2xvY2suVG9kYXkseT1QcmVkaWN0ZWQpKStnZW9tX2xpbmUoc2l6ZT0xKSt0aGVtZV9idygpKw0KIGZhY2V0X3dyYXAofklELG5jb2wgPSAyKSsNCiBnZW9tX3BvaW50KGRhdGE9b2JzaGVpZ2h0MSwgYWVzKHg9Q2xvY2suVG9kYXkxLCB5PU9ic2VydmVkKSxjb2xvdXI9ImdyZWVuIixzaXplPTMpKw0KIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCksbGVnZW5kLnBvc2l0aW9uID0gImJsYW5rIikreGxhYigiRGF0ZSIpK3lsYWIoIlBsYW50IGhlaWdodCAobW0pIikrDQogbXl0aGVtZTIrDQogYW5ub3RhdGUoInRleHQiLCB4PXltZF9obXMoIjE5OTktMTAtMjQgMTI6MDA6MDAiKSwgeT03NTAsIHNpemUgPSA1LCBsYWJlbCA9InBhc3RlKFJfUk1TRCA9PSAzNy42LCclJykiLCBwYXJzZT1UKQ0KICAgI2dlb21fdGV4dChhZXMoeD15bWRfaG1zKCIxOTk5LTEwLTI0IDEyOjAwOjAwIiksIHk9NzUwLCBsYWJlbD0iUl9STVNEID0gMzcuNiUiLHNpemU9NSkpDQogDQogI2dnc2F2ZSgiRDovUi9QaWN0dXJlcy9IZWlnaHQvSXZlcnNlbl84V2F0ZXJpcnJoZWlnaHQxLnBuZyIsIHdpZHRoPTgsIGhlaWdodD00LCBkcGk9NTAwKQ0KYGBgDQojIzIwMDItMjAwNA0KYGBge3IsICBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQ0Kb2JzaGVpZ2h0Mjwtb2JzSE4lPiUgDQogIGRwbHlyOjpmaWx0ZXIoTmFtZT09Ikl2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMIiklPiUNCiAgZHBseXI6OmZpbHRlcihWYXJpYWJsZT09IkhlaWdodCIpDQoNCnNpbUQyPC1zaW1EJT4lDQogIG11dGF0ZShDbG9jay5Ub2RheSA9IHltZF9obXMoQ2xvY2suVG9kYXkpKSU+JQ0KICBkcGx5cjo6ZmlsdGVyKFZhcmlhYmxlPT0iSGVpZ2h0IiklPiUNCiAgZHBseXI6OmZpbHRlcihOYW1lPT0iSXZlcnNlbl85MURlZm9saWF0aW9uTEwiKSU+JQ0KICAgZHBseXI6OmZpbHRlcihDbG9jay5Ub2RheT4iMjAwMi0wNi0wMSIpDQpzdHIoc2ltRDIpDQpzaW1EMiU+JQ0KZ2dwbG90KGFlcyh4PUNsb2NrLlRvZGF5LHk9UHJlZGljdGVkKSkrZ2VvbV9saW5lKHNpemU9MSkrdGhlbWVfYncoKSsNCiAgZmFjZXRfd3JhcCh+SUQsbmNvbCA9IDEpKw0KICBnZW9tX3BvaW50KGRhdGE9b2JzaGVpZ2h0MiwgYWVzKHg9Q2xvY2suVG9kYXkxLCB5PU9ic2VydmVkKSxjb2xvdXI9ImdyZWVuIixzaXplPTMpKw0KICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpLGxlZ2VuZC5wb3NpdGlvbiA9ICJibGFuayIpK3hsYWIoIkRhdGUiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpKw0KICBteXRoZW1lMisNCiAgYW5ub3RhdGUoInRleHQiLCB4PXltZF9obXMoIjIwMDMtMDctMjQgMTI6MDA6MDAiKSwgeT03NTAsIHNpemUgPSA1LCBsYWJlbCA9InBhc3RlKFJfUk1TRCA9PSAyNy42LCclJykiLCBwYXJzZT1UKQ0KICNnZW9tX3RleHQoYWVzKHg9eW1kX2htcygiMjAwMy0wNy0yNCAxMjowMDowMCIpLCB5PTc1MCwgbGFiZWw9IlJfUk1TRCA9IDI3LjYlIixzaXplPTUpKQ0KICNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOTFEZWZvbGlhdGlvbkxMaGVpZ2h0MS5wbmciLCB3aWR0aD04LCBoZWlnaHQ9NCwgZHBpPTUwMCkNCg0KYGBgDQpgYGB7ciwgIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9DQpvYnNoZWlnaHQyPC1vYnNITiU+JSANCiAgZHBseXI6OmZpbHRlcihOYW1lPT0iSXZlcnNlbl8xMjFEZWZvbGlhdGlvbkxMRkRGRDUiKSU+JQ0KICBkcGx5cjo6ZmlsdGVyKFZhcmlhYmxlPT0iSGVpZ2h0IikNCg0Kc2ltRDJhPC1zaW1EJT4lDQogIG11dGF0ZShDbG9jay5Ub2RheSA9IHltZF9obXMoQ2xvY2suVG9kYXkpKSU+JQ0KICBkcGx5cjo6ZmlsdGVyKFZhcmlhYmxlPT0iSGVpZ2h0IiklPiUNCiAgZHBseXI6OmZpbHRlcihOYW1lPT0iSXZlcnNlbl8xMjFEZWZvbGlhdGlvbkxMRkRGRDUiKSU+JQ0KICBkcGx5cjo6ZmlsdGVyKENsb2NrLlRvZGF5PCIyMDE1LTAxLTA2IikNCg0KDQpzaW1EMmI8LXNpbUQlPiUNCiAgbXV0YXRlKENsb2NrLlRvZGF5ID0geW1kX2htcyhDbG9jay5Ub2RheSkpJT4lDQogIGRwbHlyOjpmaWx0ZXIoVmFyaWFibGU9PSJIZWlnaHQiKSU+JQ0KICBkcGx5cjo6ZmlsdGVyKE5hbWU9PSJJdmVyc2VuXzEyMURlZm9saWF0aW9uTExGREZENSIpJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ2xvY2suVG9kYXk+IjIwMTUtMDEtMzAiKQ0Kc2ltRDI8LXJiaW5kKHNpbUQyYSxzaW1EMmIpDQogIA0KICAgDQpzdHIoc2ltRDIpDQpzaW1EMiU+JQ0KZ2dwbG90KGFlcyh4PUNsb2NrLlRvZGF5LHk9UHJlZGljdGVkKSkrZ2VvbV9saW5lKHNpemU9MSkrdGhlbWVfYncoKSsNCiAgZmFjZXRfd3JhcCh+SUQsbmNvbCA9IDEpKw0KICBnZW9tX3BvaW50KGRhdGE9b2JzaGVpZ2h0MiwgYWVzKHg9Q2xvY2suVG9kYXkxLCB5PU9ic2VydmVkKSxjb2xvdXI9ImdyZWVuIixzaXplPTMpKw0KICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpLGxlZ2VuZC5wb3NpdGlvbiA9ICJibGFuayIpK3hsYWIoIkRhdGUiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpKw0KICAgbXl0aGVtZTIrDQogIGFubm90YXRlKCJ0ZXh0IiwgeD15bWRfaG1zKCIyMDE2LTA3LTI0IDEyOjAwOjAwIiksIHk9OTIwLCBzaXplID0gNSwgbGFiZWwgPSJwYXN0ZShSX1JNU0QgPT0gNDAsJyUnKSIgLCBwYXJzZT1UKQ0KICNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fMTIxRGVmb2xpYXRpb25MTEZERkQ1aGVpZ2h0MS5wbmciLCB3aWR0aD04LCBoZWlnaHQ9NCwgZHBpPTUwMCkNCiAgDQogIA0KDQoNCmBgYA0KIyMyMDAwLTIwMDINCmBgYHtyLCAgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9OH0NCm9ic2hlaWdodDM8LW9ic0hOJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ29sbGVjdGlvbj09IjIwMDBfMjAwMiIpJT4lDQogIGRwbHlyOjpmaWx0ZXIoVmFyaWFibGU9PSJIZWlnaHQiKQ0KDQpzaW1EM0E8LXNpbUQlPiUNCiAgbXV0YXRlKENsb2NrLlRvZGF5ID0geW1kX2htcyhDbG9jay5Ub2RheSkpJT4lDQogIGRwbHlyOjpmaWx0ZXIoQ2xvY2suVG9kYXk+IjIwMDAtMTAtMjQgMTI6MDA6MDAiKSU+JQ0KICBkcGx5cjo6ZmlsdGVyKENsb2NrLlRvZGF5PCIyMDAyLTA3LTAxIDEyOjAwOjAwIiklPiUNCiAgZHBseXI6OmZpbHRlcihOYW1lPT1jKCJJdmVyc2VuXzlTb3dpbmdEYXRlU0QxV2F0ZXJpcnIiLCJJdmVyc2VuXzlTb3dpbmdEYXRlU0QyV2F0ZXJpcnIiLCJJdmVyc2VuXzlTb3dpbmdEYXRlU0QzV2F0ZXJpcnIiLCJJdmVyc2VuXzlTb3dpbmdEYXRlU0Q0V2F0ZXJpcnIiKSklPiUNCiAgZHBseXI6OmZpbHRlcihWYXJpYWJsZT09IkhlaWdodCIpDQogIA0KDQpERjwtZGF0YS5mcmFtZShOYW1lPWMoIkl2ZXJzZW5fOVNvd2luZ0RhdGVTRDFXYXRlcmlyciIsIkl2ZXJzZW5fOVNvd2luZ0RhdGVTRDJXYXRlcmlyciIsIkl2ZXJzZW5fOVNvd2luZ0RhdGVTRDNXYXRlcmlyciIsIkl2ZXJzZW5fOVNvd2luZ0RhdGVTRDRXYXRlcmlyciIpLElEPSBjKCJFMklMTFMxIiwiRTJJTExTMiIsIkUySUxMUzMiLCJFMklMTFM0IikpDQpzaW1EMzwtbWVyZ2UoREYsc2ltRDNBLCBieT1jKCJOYW1lIikpDQoNCnAxPC1zaW1EMyU+JQ0KZ2dwbG90KGFlcyh4PUNsb2NrLlRvZGF5LHk9UHJlZGljdGVkKSkrZ2VvbV9saW5lKHNpemU9MSkrdGhlbWVfYncoKSsNCiAgZ2VvbV9wb2ludChkYXRhPW9ic2hlaWdodDMsIGFlcyh4PUNsb2NrLlRvZGF5MSwgeT1PYnNlcnZlZCksY29sb3VyPSJncmVlbiIsc2l6ZT0zKSsNCiAgZmFjZXRfd3JhcCh+SUQsbmNvbCA9IDIpKw0KICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpLGxlZ2VuZC5wb3NpdGlvbiA9ICJibGFuayIpK3hsYWIoIkRhdGUiKSt5bGFiKCJQbGFudCBoZWlnaHQgKG1tKSIpKw0KICBteXRoZW1lMg0KDQpkYXRfdGV4dCA8LSBkYXRhLmZyYW1lKA0KICBsYWJlbCA9IGMoIlJfUk1TRT0yOC4yJSIsIlJfUk1TRT0zMy4yJSIsIlJfUk1TRT00OC42JSIsICJSX1JNU0U9MzQuNSUiKSwNCiAgSUQ9IGMoIkUySUxMUzEiLCJFMklMTFMyIiwiRTJJTExTMyIsIkUySUxMUzQiKSwNCiAgeD0geW1kX2htcygiMjAwMS0wMS0yNCAxMjowMDowMCIsICIyMDAxLTAxLTI0IDEyOjAwOjAwIiwiMjAwMS0wMS0yNCAxMjowMDowMCIsIjIwMDEtMDEtMjQgMTI6MDA6MDAiKSwNCiAgeT1jKDc1MCw3NTAsNzUwLDc1MCkpIA0KDQogcDEgK2dlb21fdGV4dChkYXRhPWRhdF90ZXh0LCBtYXBwaW5nID0gYWVzKHg9eCx5PXksIGxhYmVsID0gbGFiZWwpLGhqdXN0ICAgPSAtMC4xLHZqdXN0ICAgPSAtMSxzaXplPTUpICANCiANCiNnZ3NhdmUoIkQ6L1IvUGljdHVyZXMvSGVpZ2h0L0l2ZXJzZW5fOVNvd2luZ0RhdGVTRFdhdGVyaGVpZ2h0MS5wbmciLCB3aWR0aD04LCBoZWlnaHQ9OCwgZHBpPTUwMCkNCiAgDQpgYGANCg0KDQojIFN0YXRpc3RpYyBhbmQgR3JhcGgNCmBgYHtyLGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9DQptZXJnZWRmDQpzdW1tYXJ5KG1lcmdlZGYpDQpzdHIobWVyZ2VkZikNCg0KbWVyZ2VkZiAlPiUNCiAgICBkcGx5cjo6ZmlsdGVyKFZhcmlhYmxlPT0gIkhlaWdodCIpICU+JSANCiAgZ2dwbG90KGFlcyh4PU9ic2VydmVkLCB5PSBQcmVkaWN0ZWQsIA0KICAgICAgICAgIGNvbG91cj0gZmFjdG9yKE5hbWUpKSkgKw0KICBnZW9tX3BvaW50KHNpemU9MikrdGhlbWVfYncoKSsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBsaW5ldHlwZSA9IDEsIGNvbG91cj0iZGFya2dyZXkiKSArDQogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IDAsIHNsb3BlID0gMSkgKw0KICBjb29yZF9maXhlZChyYXRpbyA9IDEpKw0KICBnZ3RpdGxlKCJQbGFudCBoZWlnaHQiKSsNCiAgZmFjZXRfd3JhcCh+SUQsIG5jb2wgPSA0KSsNCiAgdGhlbWUobGVnZW5kLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSxsZWdlbmQucG9zaXRpb24gPSAiYmxhbmsiKSt4bGFiKCJPYnNlcnZlZCIpK3lsYWIoIlByZWRpY3RlZCIpKw0KICBteXRoZW1lMg0KICANCiAgI2dnc2F2ZSgiRDovUi9QaWN0dXJlcy9IZWlnaHQvcHJlZGljdGVkLnBuZyIsIHdpZHRoPTgsIGhlaWdodD02LCBkcGk9NTAwKQ0KYGBgDQoNCg0KIyMgMjAwMi0yMDA0DQoNCmBgYHtyLCAgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTB9DQptZXJnZWRmDQpzdW1tYXJ5KG1lcmdlZGYpDQpzdHIobWVyZ2VkZikNCg0KbWVyZ2VkZiAlPiUNCiAgICBkcGx5cjo6ZmlsdGVyKENvbGxlY3Rpb249PSIyMDAyXzIwMDQiKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9T2JzZXJ2ZWQsIHk9IFByZWRpY3RlZCwgDQogICAgICAgICAgY29sb3VyPSBmYWN0b3IoTmFtZSkpKSArDQogIGdlb21fcG9pbnQoc2l6ZT0zKSt0aGVtZV9idygpKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGxpbmV0eXBlID0gMSwgY29sb3VyPSJkYXJrZ3JleSIpICsNCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSAxKSArDQogIGNvb3JkX2ZpeGVkKHJhdGlvID0gMSkrDQogIGdndGl0bGUoIlBsYW50IGhlaWdodCIpKw0KICBmYWNldF9ncmlkKEdyb3d0aFNlYXNvbi54flJvdGF0aW9uLngpKw0KICB0aGVtZShsZWdlbmQudGl0bGU9ZWxlbWVudF9ibGFuaygpLGxlZ2VuZC5wb3NpdGlvbiA9ICJibGFuayIpK3hsYWIoIk9ic2VydmVkIikreWxhYigiUHJlZGljdGVkIikrDQogIHRoZW1lKGF4aXMudGl0bGUueD1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsY29sb3VyPSJibGFjayIsc2l6ZSA9IDEyKSkrDQogIHRoZW1lKGF4aXMudGl0bGUueT1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsY29sb3VyPSJibGFjayIsc2l6ZSA9IDEyKSkNCmBgYA0KDQoNCiMjIDIwMDAtMjAwMg0KDQpgYGB7cn0NCm1lcmdlZGYNCnN1bW1hcnkobWVyZ2VkZikNCnN0cihtZXJnZWRmKQ0KDQptZXJnZWRmICU+JQ0KICAgIGRwbHlyOjpmaWx0ZXIoQ29sbGVjdGlvbj09IjIwMDBfMjAwMiIpJT4lDQogIGdncGxvdChhZXMoeD1PYnNlcnZlZCwgeT0gUHJlZGljdGVkLCANCiAgICAgICAgICBjb2xvdXI9IGZhY3RvcihOYW1lKSkpICsNCiAgZ2VvbV9wb2ludChzaXplPTMpK3RoZW1lX2J3KCkrDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgbGluZXR5cGUgPSAxLCBjb2xvdXI9ImRhcmtncmV5IikgKw0KICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAwLCBzbG9wZSA9IDEpICsNCiAgY29vcmRfZml4ZWQocmF0aW8gPSAxKSsNCiAgZ2d0aXRsZSgiSGVpZ2h0IikrDQogIGZhY2V0X2dyaWQoR3Jvd3RoU2Vhc29uLnh+Um90YXRpb24ueCkrDQogIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCksbGVnZW5kLnBvc2l0aW9uID0gImJsYW5rIikreGxhYigiT2JzZXJ2ZWQiKSt5bGFiKCJQcmVkaWN0ZWQiKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTIpKSsNCiAgdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTIpKQ0KYGBgDQoNCg0KDQoNCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD04LCB3YXJuaW5nPUZBTFNFfQ0KbWVyZ2VkZiAlPiUNCiAgICBkcGx5cjo6ZmlsdGVyKENvbGxlY3Rpb249PSIxOTk3XzIwMDEiKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9T2JzZXJ2ZWQsIHk9IFByZWRpY3RlZCwgDQogICAgICAgICAgY29sb3VyPSBmYWN0b3IoTmFtZSkpKSArDQogIGdlb21fcG9pbnQoc2l6ZT0zKSt0aGVtZV9idygpICsNCiAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgbGluZXR5cGUgPSAxLCBjb2xvdXI9ImRhcmtncmV5IikgKw0KICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAwLCBzbG9wZSA9IDEpICsNCiAgY29vcmRfZml4ZWQocmF0aW8gPSAxKSArDQogIGdndGl0bGUoIlBsYW50IGhlaWdodCIpICArDQogIGZhY2V0X2dyaWQoR3Jvd3RoU2Vhc29uLnh+Um90YXRpb24ueCkrDQogIHRoZW1lKGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCksbGVnZW5kLnBvc2l0aW9uID0gImJsYW5rIikreGxhYigiT2JzZXJ2ZWQiKSt5bGFiKCJQcmVkaWN0ZWQiKSsNCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTIpKSsNCiAgdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfdGV4dChmYWNlPSJib2xkIixjb2xvdXI9ImJsYWNrIixzaXplID0gMTIpKQ0KYGBgDQoNCg0KIyMgUk1TRQ0KDQpgYGB7cn0NCnN0cihtZXJnZWRmKQ0KDQptZXJnZWRmICU+JQ0KICBncm91cF9ieShJRCkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBuID0gbigpLA0KICAgIHIyID0gZ2F1Y2hTdGF0cyhQcmVkaWN0ZWQsT2JzZXJ2ZWQpWzVdLA0KICAjICBybXNlID0gcm91bmQocm1zZShQcmVkaWN0ZWQsT2JzZXJ2ZWQpLDApLA0KICAgIHJfcm1zZSA9IHJvdW5kKHJtc2UoUHJlZGljdGVkLE9ic2VydmVkKS9tZWFuKE9ic2VydmVkKSoxMDAsMSksDQogICAgbnNlID0gcm91bmQoTlNFKFByZWRpY3RlZCxPYnNlcnZlZCksMiksDQogICAgc2IgPSBnYXVjaFN0YXRzKFByZWRpY3RlZCxPYnNlcnZlZClbMV0sDQogIG51ID0gZ2F1Y2hTdGF0cyhQcmVkaWN0ZWQsT2JzZXJ2ZWQpWzJdLA0KICBsYyA9IGdhdWNoU3RhdHMoUHJlZGljdGVkLE9ic2VydmVkKVszXQ0KICApIA0KDQojIE5BUiA9IGZvcm1hdChjb2VmKG0pWzJdLCBkaWdpdHMgPSAyKQ0KDQojICU+JQ0KIyAgIGdyb3VwX2J5KFZhcmlhYmxlLE5hbWUpICU+JQ0KIyAgIHN1bW1hcmlzZV9lYWNoKGZ1bnMobWVhbikpDQogIA0KYGBgDQojIyMjI0hlaWdodCBhZw0KDQoNCg0KDQoNCg==